我有一个结构为INSERT语句的备份文件。我的方法是编写一个方法从文件中加载这些语句,并使用JDBC模板执行它们。
public void restoreFile(File f) throws Exception {
LineIterator it = FileUtils.lineIterator(f, "UTF-8");
try {
while (it.hasNext()) {
String insertStatement = it.nextLine();
if (!insertStatement.startsWith("--") && !insertStatement.isEmpty()) {
insertStatement = insertStatement.replace(";", "");
executeSqlStatement(insertStatement);
}
}
} finally {
it.close();
}
}
public void executeSqlStatement(String sqlStatement) throws Exception {
PreparedStatementCreator statement = new PreparedStatementCreator() {
@Override
public PreparedStatement createPreparedStatement(Connection connection) throws SQLException {
PreparedStatement statement = connection.prepareStatement(sqlStatement);
return statement;
}
};
getJdbcTemplate().update(statement);
}
org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: ORA-01704: string literal too long
编辑:另外,SQL Developer如何处理这些长字符串文本?
黑客来了:
public void executeSqlStatement(String sqlStatement) throws Exception {
PreparedStatementCreator statement = new PreparedStatementCreator() {
@Override
public PreparedStatement createPreparedStatement(Connection connection)
throws SQLException {
List<String> params = new ArrayList<>();
if (sqlStatement.length() >= 4000) {
Pattern pattern = Pattern.compile("'(([^'\n]|'')+)'");
Matcher m = pattern.matcher(sqlStatement);
StringBuffer sb = new StringBuffer();
while (m.find()) {
params.add(m.group(1).replace("''", "'"));
m.appendReplacement(sb, "?");
}
m.appendTail(sb);
sqlStatement = sb.toString();
}
PreparedStatement statement = connection.prepareStatement(sqlStatement);
for (int i = 0; i < params.size(); ++i) {
statement.setString(1 + i, params[i]);
}
return statement;
}
};
getJdbcTemplate().update(statement);
}
如您所见:它试图通过提取字符串文本来缩小较大的SQL。
我真的需要帮助,我在stackoverflow上找到的所有问题中都搜索到了,但没有任何效果。我以前从未使用过hibernate,我不知道自己做错了什么 这是我的存储库:https://github.com/ionutincau/test_db 我收到了这个错误:
我在使用以下方言创建表时遇到以下错误 “org.hibernate.dialoget.mysqlinoddDialogic”
问题内容: 我真的需要帮助,我在关于stackoverflow的所有问题中进行了搜索,但没有任何效果。我以前从未使用过hibernate模式,也不知道自己在做什么错。 这是我的存储库:https : //github.com/ionutincau/test_db 我收到此错误: 问题答案: 在您的CFG文件中,请更改hibernate方言
问题内容: 我正在尝试使用MySQLdb从Python脚本在MySQL表上执行基本语句。我的桌子看起来像这样: 从MySQL命令行运行此查询可以正常工作: 但是,当我尝试从Python脚本执行查询时,不会插入任何行。这是我的代码: 奇怪的是,这将显示“插入的行数:1”。我还可以确认此查询增加了ID字段,因为当我通过命令行添加另一行时,其ID的值与Python脚本已成功插入其行的值相同。但是,运行查
下面给出一个例子来演示一下如何使用JDBC来执行各种SQL语句,其中包括DDL语句(建立数据库和数据表)、INSERT语句和SELECT语句。 1.程序分析说明 本程序首先创建一个mydb数据库(如果存在就不创建),然后创建一个用于保存图书信息的表t_books(如果存在,删除后再创建),最后向表中插入两条记录,并查询和显示其中的第2条记录。 2.代码编写 本程序使用了Statement接口的ex
问题内容: 我需要对CSV文件(以逗号分隔的文本文件)应用SQL查询。我的SQL是通过其他工具预定义的,无法更改。它可能在FROM部分中包含嵌入式选择和表别名。 对于我的任务,我发现了两个提供JDBC驱动程序 的开源 库(这是项目要求): CsvJdbc XlSQL JBoss Teiid 创建一个Apache Derby DB,将所有CSV加载为表格并执行查询。 这些是我遇到的问题: 它不接受S