这似乎是一个非常简单的问题,但是我无法弄清楚我的问题是什么。我有一个方法addTask,它将一些信息添加到我们的数据库中,如以下代码所示:
public static boolean addTask(String name, String question, int accuracy, int type){
StringBuilder sql = new StringBuilder();
sql.append("INSERT INTO tasks (name, question, type, accuracy) ");
sql.append("VALUES(?, ?, ?, ?)");
try {
Connection c = DbAdaptor.connect();
PreparedStatement preparedStatement = c.prepareStatement(sql.toString());
preparedStatement.setString(1, name);
preparedStatement.setString(2, question);
preparedStatement.setInt(3, type);
preparedStatement.setInt(4, accuracy);
preparedStatement.execute();
preparedStatement.close();
c.close();
return true;
}
catch (SQLException e) {
e.printStackTrace();
return false;
}
}
我的问题是prepareStatement.execute()始终返回false,表示该信息尚未添加到数据库中。我可以运行psql,这确认没有任何内容写入数据库。该连接肯定会连接到正确的数据库(我将其放置在其他一些printlns中进行检查)。我正在尝试插入一个新初始化的表,如下所示:
CREATE TABLE tasks
(
id SERIAL PRIMARY KEY,
submitter INTEGER REFERENCES accounts (id),
name VARCHAR(100) NOT NULL,
question VARCHAR(100) NOT NULL,
accuracy INTEGER NOT NULL,
type INTEGER REFERENCES types (id),
ex_time TIMESTAMP,
date_created TIMESTAMP
);
DbAdaptor.connect()的代码:
public static Connection connect(){
try {
Class.forName("org.postgresql.Driver");
} catch (ClassNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
Properties properties = new Properties();
properties.setProperty("user", USER);
properties.setProperty("password", PASSWORD);
try {
return DriverManager.getConnection(URL, properties);
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
where USER
和PASSWORD
是类中的静态字段
您误解了的返回值PreparedStatement#execute()
。
请仔细阅读javadoc:
返回值:
true
如果第一个结果是ResultSet
对象;false
如果第一个结果是更新计数或没有结果。
因此,它的回报-因为完全在意料之中-
false
上INSERT
查询。它仅true
在SELECT
查询时返回(但是您通常希望使用该查询,executeQuery()
而不是直接返回ResultSet
)。
如果您对受影响的行感兴趣,请PreparedStatement#executeUpdate()
改用。它返回一个int
按的Javadoc:
返回值:
(1)SQL数据操作语言(DML)语句的行计数,或者(2)SQL语句不返回任何内容的行数
返回值等于或大于1则表示插入成功。
问题内容: 我想使用PreparedStatement将行插入表中。该表有3列(int,String,String)。关键是int列是AUTO_INCREMENT,所以我想将该变量保留为空,然后让数据库完成该工作(这是一个id)。还没有找到如何做! 这是一个MySQL数据库。 问题答案: 这是相对简单的,只需从列列表中删除自动增量列即可: 准备该语句,设置两个参数,然后在非查询模式下执行。
问题内容: 我试图在不使用准备好的语句的情况下将一些Binary数据插入MySQL数据库。原因是我将成千上万条语句连接到一个插入中,一次运行一次。(MySQL转储和导入的工作原理) 我已经尝试了以下语句,但是都失败了: 插入my_table值(1,’g = F| }X ‘,2); 插入my_table值(1,CAST(’g = F| }X ‘as BINARY),2); 插入my_table值(1
本文向大家介绍Android 将数据插入数据库,包括了Android 将数据插入数据库的使用技巧和注意事项,需要的朋友参考一下 示例
事情是这样的 我不知道发生了什么,如果有人能帮忙,我会非常感激的。THX!
问题内容: 我希望能够将bigints数组写入要用于Go历史记录的表中。不幸的是,我不能,当我这样做时`sql: converting Exec argument 这是我要插入的表的结构: 问题答案: 使用自定义类型实现database / sql / driver.Valuer:
问题内容: 我想在我的MySQL数据库中插入整数188和90,但以下代码不起作用: 为什么不起作用? 问题答案: 编辑 为我工作: 在MySQL表;