import java.sql.*;
public class NewConnection{ private static Connection con;
private static ResultSet rs;
private static Statement sm;
private static final String DRIVER = "sun.jdbc.odbc.JdbcOdbcDriver";
private static final String URL = "jdbc:odbc:Driver={Microsoft Access driver (*.mdb)};DBQ=E:\\Database.mdb;";
private static String query;
int i;
private void getConnection(){
try {
Class.forName(DRIVER);
System.out.println("Driver Connected");
con=DriverManager.getConnection(URL);
System.out.println("Database Connected");
sm=con.createStatement();
} catch (Exception e) {
}
}
private int ExecuteUpdate(String query1)
{
try {
System.out.println(query1);
i=sm.executeUpdate(query1);
} catch (Exception e) {
e.printStackTrace();
}
return i;
}
public static void main(String []args){
NewConnection n= new NewConnection();
n.getConnection();
query="insert into Emp values('samr','sam','sa','aas')";
System.out.println(n.ExecuteUpdate(query));
}
}
这是在MS Access Database中插入数据的代码.Databse是d数据库的名称。 但是我无法在其中插入数据。查询成功运行但不在数据库中添加数据。 不知道你..? 如果查询更改,代码将成功在数据库中创建表。
任何人都可以告诉我这是什么问题或我错在哪里..
谢谢
答案 0 :(得分:0)
在getConnection()方法中修改catch
语句,先执行此操作,看看是否有任何错误
private void getConnection(){
try {
Class.forName(DRIVER);
System.out.println("Driver Connected");
con=DriverManager.getConnection(URL);
System.out.println("Database Connected");
sm=con.createStatement();
} catch (Exception e) {
e.printStacktrace();
}
}
答案 1 :(得分:0)
永远不要这样做!
catch (Exception e)
{
}
首先,你正在捕捉你不应该捕捉的各种东西 - NullPointerException,ArrayIndexOutOfBoundsException等... - 表示代码中存在错误的东西。
只捕捉编译器告诉你的必须,除非你有充分的理由。
其次,如果有任何异常被抛出,你永远不会知道,因为你什么都不做。至少做“e.printStackTrace()”或记录它,这样你就可以看出出了什么问题。
答案 2 :(得分:0)
你真的提交了交易吗?将insert语句发送到db后,如在java.sql.Connection.commit()中?它理论上应该设置为“auto-commit”,你可以通过查询java.sql.Connection.getAutoCommit()来检查它。
private int ExecuteUpdate(String query1)
{
try {
System.out.println(query1);
i=sm.executeUpdate(query1);
con.commit(); //try to commit the query
} catch (Exception e) {
e.printStackTrace();
}
return i;
}
此外,非常重要:不要对Connection,Statement和Query 对象使用静态,因为它们可以并且将被NewConnection的其他实例覆盖。使用这种架构,你必须绝对确保NewConnection是一个Singleton,或者在并行使用这些对象中的任何一个(并且每次重用它们时都会重置)。