我正在编写连接到localhost的应用程序。当应用程序首次运行时,我希望它使用此方法初始化数据库:
public void initDataBase() {
try {
Statement stm = con.createStatement();
stm.executeQuery("source shippingSQLscript.sql");
} catch (SQLException ex) {
ex.printStackTrace();
}
}
其中shippingSQLscript.sql包含正确的sql语句以插入所有数据。但是,当我运行它时,方法抛出:
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:
You have an error in your SQL syntax; check the manual that corresponds to your
MySQL server version for the right syntax to use near 'source shippingSQLscript.sql'
at line 1
我也尝试使用stm.execute()
,但结果相同。
答案 0 :(得分:3)
您无法使用JDBC驱动程序执行此操作。 source
只是MySQL命令行工具支持的命令。见这里:
http://forums.mysql.com/read.php?39,406094,406329#msg-406329
以下是命令行工具的命令列表。大多数不支持JDBC查询语句。
您必须从代码中的文件加载SQL命令并将它们发送到JDBC执行方法。类似的东西:
Statement stm = con.createStatement();
BufferedReader reader = new BufferedReader(new FileReader(new File(...)));
while (true) {
String line = reader.readLine();
if (line == null) {
break;
}
// this is the trick -- you need to pass different SQL to different methods
if (line.startsWith("SELECT")) {
stm.executeQuery(line);
} else if (line.startsWith("UPDATE") || line.startsWith("INSERT")
|| line.startsWith("DELETE")) {
stm.executeUpdate(line);
} else {
stm.execute(line);
}
}
stm.close();
答案 1 :(得分:0)
我使用了这样的东西......如果有多行的sql命令,它就可以工作。 如果sql文件太大也可能有问题,对我来说它工作正常。
BufferedReader br = new BufferedReader(new FileReader(DBFILE));
statement = connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
System.out.println("Reading SQL File...");
String line="";
StringBuilder sb = new StringBuilder();
while( (line=br.readLine())!=null)
{
if(line.length()==0 || line.startsWith("--"))
{
continue;
}else
{
sb.append(line);
}
if(line.trim().endsWith(";"))
{
statement.execute(sb.toString());
sb = new StringBuilder();
}
}
br.close();