Mac*_*rse 66 java mysql sql jdbc
我开始使用MySQL和JDBC.
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql:///x", "x", "x");
stmt = conn.createStatement();
stmt.execute( "CREATE TABLE amigos" +
"("+
"id int AUTO_INCREMENT not null,"+
"nombre char(20) not null,"+
"primary key(id)" +
")");
Run Code Online (Sandbox Code Playgroud)
我有3-4个表来创建,这看起来不太好.
有没有办法从MySQL JDBC运行.sql脚本?
jit*_*ter 71
好.您可以在此项目中使用此类(由于文件长度而在pastebin上发布).但请记住保留apache许可证信息.
这是删除了依赖项的iBatis ScriptRunner的ripoff.
你可以像这样使用它
Connection con = ....
ScriptRunner runner = new ScriptRunner(con, [booleanAutoCommit], [booleanStopOnerror]);
runner.runScript(new BufferedReader(new FileReader("test.sql")));
Run Code Online (Sandbox Code Playgroud)
而已!
Ami*_*far 24
我对此做了很多研究,并从春天找到了一个好的工具.我认为使用SimpleJdbcTestUtils.executeSqlScript(...)实际上是最好的解决方案,因为它更加维护和测试.
编辑:SimpleJdbcTestUtils已弃用.你应该用JdbcTestUtils.更新了链接.
Abd*_*ull 16
Spring Framework ResourceDatabasePopulator可能会有所帮助.正如您所说的那样,您正在使用MySQL和JDBC,我们假设您已DataSource准备好MySQL支持的实例.此外,假设您的MySQL脚本文件是类路径可定位的.假设您使用的是WAR布局,脚本文件位于目录src/main/webapp/resources/mysql-scripts/...或src/test/resources/mysql-scripts/....然后你可以ResourceDatabasePopulator用来执行这样的SQL脚本:
import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator;
import javax.sql.DataSource;
DataSource dataSource = getYourMySQLDriverBackedDataSource();
ResourceDatabasePopulator rdp = new ResourceDatabasePopulator();
rdp.addScript(new ClassPathResource(
"mysql-scripts/firstScript.sql"));
rdp.addScript(new ClassPathResource(
"mysql-scripts/secondScript.sql"));
try {
Connection connection = dataSource.getConnection();
rdp.populate(connection); // this starts the script execution, in the order as added
} catch (SQLException e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
对于由';'拆分的简单sql脚本 你可以使用这个简单的功能.它逐个删除注释和运行语句
static void executeScript(Connection conn, InputStream in)
throws SQLException
{
Scanner s = new Scanner(in);
s.useDelimiter("/\\*[\\s\\S]*?\\*/|--[^\\r\\n]*|;");
Statement st = null;
try
{
st = conn.createStatement();
while (s.hasNext())
{
String line = s.next().trim();
if (!line.isEmpty())
st.execute(line);
}
}
finally
{
if (st != null)
st.close();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
59848 次 |
| 最近记录: |