我正在尝试制作动态删除查询。
我基本上尝试做的是首先获取任何表(主键)中第一列的名称。然后我在另一个查询中使用它来删除该表,虽然我得到一个nullpointerexception?
哦,主键不是像1,2,3,4,5那样的INT ..它形成了S1,S2,S3,S4,S5等,并且有TEXT类型。
Connection c = null;
Statement stmt = null;
try {
Class.forName("org.sqlite.JDBC");
c = DriverManager.getConnection("jdbc:sqlite:test.db");
c.setAutoCommit(true);
System.out.println("Opened database successfully");
ResultSet rs = stmt.executeQuery("SELECT * FROM "+tablename);
ResultSetMetaData rsmd = rs.getMetaData();
FirstColumn = rsmd.getColumnName(1);
String query = "DELETE FROM "+tablename+" WHERE " +FirstColumn+ " = " +row;
stmt = c.createStatement();
stmt.executeUpdate(query);
stmt.close();
c.close();
答案 0 :(得分:1)
初始化您的stmt
对象...
stmt = c.createStatement();
在执行查询之前。
答案 1 :(得分:1)
我将假设您正在使用的所有变量都已初始化。
我在FirstColumn名称周围添加了单引号。
Connection c = null;
Statement stmt = null;
try {
Class.forName("org.sqlite.JDBC");
c = DriverManager.getConnection("jdbc:sqlite:test.db");
c.setAutoCommit(true);
System.out.println("Opened database successfully");
ResultSet rs = stmt.executeQuery("SELECT * FROM "+tablename);
ResultSetMetaData rsmd = rs.getMetaData();
FirstColumn = rsmd.getColumnName(1);
String query = "DELETE FROM "+ tablename +" WHERE " + FirstColumn + " = '" + row + "'";
stmt = c.createStatement();
stmt.executeUpdate(query);
stmt.close();
c.close();
如果您仍然收到错误,请尝试打印出您的行名称并查看打印出来的内容。
编辑:由于您在风格上是新的,因此在使用运算符来提高代码可读性时,最好添加单个空格。例如,1 + 3 + x + 34比1 + 3 + x + 34更难阅读。当然,没有"错误"代码风格,但提高代码可读性始终是一个加号。