私はこの表から選択しようとしているJDBCで働いている:JDBC MySQLのクエリ構文
CREATE TABLE PERIT (
COGNOM1 VARCHAR(30) NOT NULL,
COGNOM2 VARCHAR(30) NOT NULL,
DATANAIX DATE NOT NULL,
NOM VARCHAR(30) NOT NULL,
NIF VARCHAR(10) NOT NULL,
LOGIN VARCHAR(50) NOT NULL,
PASSWORDMD5 VARCHAR(50) NOT NULL,
NUMERO INT(3) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (NUMERO)
);
私はこのような特定のログインとPASSWORDMD5値を持つ行が存在するかどうかを確認したい:
public int Login(String Login, String pass) {
Statement st = null;
ResultSet rs = null;
int count =0;
try {
st = con.createStatement();
String consulta = "Select count(*) from Perit p where p.LOGIN =";
consulta += Login;
consulta +=" and p.PASSWORDMD5 = MD5(";
consulta +=pass;
consulta+=")";
rs = st.executeQuery(consulta);
while (rs.next()) {
count = rs.getInt(1);
}
st.close();
rs.close();
} catch (SQLException ex) {
Logger.getLogger(JDBCMySQL.class.getName()).log(Level.SEVERE, null, ex);
}
return count;
}
しかし、ときに私は、私はこのエラーを取得するLogin("LOGINPERIT1","PASSWORDMDPERIT")
を呼び出す:
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:不明で列 'LOGINPERIT1 'WHERE句' sun.reflect.DelegatingConstructorAccessorImpl.newInstanceでsun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)で sun.reflect.NativeConstructorAccessorImpl.newInstance0(ネイティブメソッド) で(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) com.mysql.jdbc.Util.handleNewInstance(Util.java:425) com.mysql.jdbc .Util.getInstance(Util.java:408)at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:943)at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3973)at com .mysql。 jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3909)at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2527) com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2680)at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2497)at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2455)at com.mysql.jdbc.StatementImpl.executeQuery(StatementImpl.java:コメント欄で述べたように info.infomila.info.ThreadHandler.run(ThreadHandler.java:56で info.infomila.info.JDBCMySQL.Login(JDBCMySQL.java:139))
PreparedStatementを使用すると、使用するほうがはるかに安全です。あなたのエラーの理由は、 'Strings'はシングルクォートでなければならないということです。それ以外の場合はカラム名として扱います。 –
カラムが存在するかどうかを確認してください" LOGINPERIT1 " –
あなたの文字列、すなわちログインとパスワードは引用されません。それらを引用して確認してください。 –