【发布时间】:2014-11-02 16:14:49
【问题描述】:
我已经用 java 小程序连接了一个访问数据库。在其中,我在与学校合作时给出了学生及其学校的价值观,有两所学校(假设):
小花学校
圣若瑟学校
我有一个方法存储和 getchestname(它用于校际比赛。将箱子名称作为唯一 ID)。两个函数运行sql命令如下:
//getchestname :
ResultSet rs = db.exec("SELECT * FROM Pariticipants WHERE `school` = '"+schools[sc][1]+"' AND event = '"+events[ev][1]+"' AND category = '"+cat[ca][1]+"' AND gender = '"+g2+"'");
//Store:
rs = db.exec("INSERT INTO Pariticipants ( school , name, event, category , gender ,chestname ) VALUES ('"+schools[sc][1]+"','"+name+"','"+events[ev][1]+"','"+cat[ca][1]+"','"+g+"','"+cname+"')");
当学校设置为小花学校时,它工作得很好,但是当我使用后者时,它给出了这个错误:
java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression '`school` = 'St. Joseph\'s school' AND event = '50 m Race' AND category = 'Primary' AND gender = 'Boy''.
我认为这是由于撇号 (')。
编辑: DBConn.java(db connection . early)
import java.sql.*;
/**
* Write a description of class DBConnector here.
*
* @author Darshan Baid
* @version (a version number or a date)
*/
public class DBConn
{
String accessFileName = "C:\\Users\\Darshan\\Documents\\Database1.accdb";
Connection con;
public ResultSet exec(String query)
{
try{
Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
stmt.execute(query); // execute query in table student
ResultSet rs = stmt.getResultSet(); // get any Result that came from our query
return rs;
}
catch(Exception e)
{
e.printStackTrace();
return null;
}
}
public void connect() {
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String connURL="jdbc:odbc:DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ="+this.accessFileName+";";
this.con = DriverManager.getConnection(connURL, "","");
}
catch(Exception e)
{
e.printStackTrace();
}
}
public boolean close()
{
try{
con.close();
return true;
}
catch(Exception e)
{
e.printStackTrace();
return false;
}
}
}
现在:
import java.sql.*;
public class DBConn
{
String accessFileName = "C:\\Users\\Darshan\\Documents\\Database1.accdb";
Connection con;
public ResultSet exec(String query)
{
try{
Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
stmt.execute(query); // execute query in table student
ResultSet rs = stmt.getResultSet(); // get any Result that came from our query
return rs;
}
catch(Exception e)
{
e.printStackTrace();
return null;
}
}
public ResultSet exec(String query,String[] ar)
{
try{
PreparedStatement userRecord_stmt = con.prepareStatement(query);
for(int i = 0; i< ar.length;i++)
userRecord_stmt.setString(1,ar[i]);
ResultSet userRecord_rs = userRecord_stmt.executeQuery();
return userRecord_rs;
}catch(Exception e)
{
e.printStackTrace();
return null;
}
}
public void connect() {
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String connURL="jdbc:odbc:DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ="+this.accessFileName+";";
this.con = DriverManager.getConnection(connURL, "","");
}
catch(Exception e)
{
e.printStackTrace();
}
}
public boolean close()
{
try{
con.close();
return true;
}
catch(Exception e)
{
e.printStackTrace();
return false;
}
}
}
并更改为胸名功能。 :
String ar[] = {schools[sc][1],events[ev][1],cat[ca][1],g2};
//ResultSet rs = db.exec("SELECT * FROM Pariticipants WHERE `school` = '"+schools[sc][1]+"' AND event = '"+events[ev][1]+"' AND category = '"+cat[ca][1]+"' AND gender = '"+g2+"'");
ResultSet rs = db.exec("SELECT * FROM Pariticipants WHERE `school` = ? AND `event` = ? AND `category` = ? AND `gender` = ?",ar);
面临的错误:
java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver]COUNT field incorrect
【问题讨论】:
标签: java sql ms-access jdbc-odbc