相关的程序如下:
public static void saveToDB(String message){
decodeMSG(message);
Info i = new Info();
String time = i.time;
String info = i.info;
String url = "jdbc:odbc:test"; try {
Class.forName ("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(java.lang.ClassNotFoundException e) {
System.out.print("ClassNotFoundException: ");
System.out.println(e.toString());
}
try{
Connection con = DriverManager.getConnection (url);
//Statement stmt = con.createStatement();
PreparedStatement pstmt=con.prepareStatement("INSERT INTO test(time,info) VALUES (?,?)");
pstmt.setString(1,time);
pstmt.setString(2,info);
pstmt.executeUpdate();
pstmt.close();
con.close();
}catch (SQLException ex) {
ex.printStackTrace();
}
} public static Info decodeMSG(String message){ //解析消息
Info i = new Info();
StringTokenizer st=new StringTokenizer(message,"*");
i.time = st.nextToken();
if(st.hasMoreTokens()){
i.info=st.nextToken();
}
return i;
} 在得到message之后用saveToDB方法,先调用decodeMSG方法解析消息,然后写入数据库
因为要return多个值就写了个Info类
class Info{
public static String time;
public static String info;
}
但始终报错,完整错误信息如下:
java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] INSERT INTO 语句的语法错误。
at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6958)
at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7115)
at sun.jdbc.odbc.JdbcOdbc.SQLExecute(JdbcOdbc.java:3150)
at sun.jdbc.odbc.JdbcOdbcPreparedStatement.execute(JdbcOdbcPreparedStatement.java:214)
at sun.jdbc.odbc.JdbcOdbcPreparedStatement.executeUpdate(JdbcOdbcPreparedStatement.java:136)
at TestServer.saveToDB(TestServer.java:54)
at ServerThread.run(TestServer.java:170)
public static void saveToDB(String message){
decodeMSG(message);
Info i = new Info();
String time = i.time;
String info = i.info;
String url = "jdbc:odbc:test"; try {
Class.forName ("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(java.lang.ClassNotFoundException e) {
System.out.print("ClassNotFoundException: ");
System.out.println(e.toString());
}
try{
Connection con = DriverManager.getConnection (url);
//Statement stmt = con.createStatement();
PreparedStatement pstmt=con.prepareStatement("INSERT INTO test(time,info) VALUES (?,?)");
pstmt.setString(1,time);
pstmt.setString(2,info);
pstmt.executeUpdate();
pstmt.close();
con.close();
}catch (SQLException ex) {
ex.printStackTrace();
}
} public static Info decodeMSG(String message){ //解析消息
Info i = new Info();
StringTokenizer st=new StringTokenizer(message,"*");
i.time = st.nextToken();
if(st.hasMoreTokens()){
i.info=st.nextToken();
}
return i;
} 在得到message之后用saveToDB方法,先调用decodeMSG方法解析消息,然后写入数据库
因为要return多个值就写了个Info类
class Info{
public static String time;
public static String info;
}
但始终报错,完整错误信息如下:
java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] INSERT INTO 语句的语法错误。
at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6958)
at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7115)
at sun.jdbc.odbc.JdbcOdbc.SQLExecute(JdbcOdbc.java:3150)
at sun.jdbc.odbc.JdbcOdbcPreparedStatement.execute(JdbcOdbcPreparedStatement.java:214)
at sun.jdbc.odbc.JdbcOdbcPreparedStatement.executeUpdate(JdbcOdbcPreparedStatement.java:136)
at TestServer.saveToDB(TestServer.java:54)
at ServerThread.run(TestServer.java:170)
test表的字段都是可以为空的
而且我也试过在后台输出要写入的String time 和info,都不为nullto li_d_s:
是指time,user这种类似与保留字的字段么?我改改试试看...
纠结了我一整天的问题啊...- -