-
2018-12-08 14:41:56
java 调用 .sql 文件,并执行数据库语句
package com.skycc.util; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.io.InputStreamReader; import java.sql.Connection; import java.sql.DriverManager; import java.util.Properties; import org.apache.ibatis.io.Resources; import org.apache.ibatis.jdbc.ScriptRunner; public class SqlFileUtils { public static void main(String[] args) { try { runSqlInStat("E:/sql/t_config.sql"); } catch (Exception e) { e.printStackTrace(); } } /** * 执行xx库下的表备份脚本 * * @param tableName */ public static void runSqlInStat(String path) { Properties prop=new Properties(); try { InputStream in = SqlFileUtils.class.getClassLoader().getResourceAsStream("application.properties"); prop.load(in); } catch (Exception e) { e.printStackTrace(); } String className = prop.getProperty("spring.datasource.driver-class-name"); String dbUrl = prop.getProperty("spring.datasource.url"); String dbUsername = prop.getProperty("spring.datasource.username"); String dbPassword = prop.getProperty("spring.datasource.password"); try { Class.forName(className); Connection conn = DriverManager.getConnection(dbUrl, dbUsername, dbPassword); ScriptRunner runner = new ScriptRunner(conn); runner.setAutoCommit(true); String fileName = String.format(path); File file = new File(fileName); try { if (file.getName().endsWith(".sql")) { runner.setFullLineDelimiter(false); runner.setDelimiter(";");//语句结束符号设置 runner.setLogWriter(null);//日志数据输出,这样就不会输出过程 runner.setSendFullScript(false); runner.setAutoCommit(true); runner.setStopOnError(true); runner.runScript(new InputStreamReader(new FileInputStream(fileName), "utf8")); } } catch (Exception e) { e.printStackTrace(); } conn.close(); } catch (Exception e) { e.printStackTrace(); } } }
更多相关内容 -
java执行SQL语句实现查询的通用方法详解
2020-08-28 11:38:51主要介绍了java执行SQL语句实现查询的通用方法详解,具有一定借鉴价值,需要的朋友可以参考下。 -
java定时执行sql语句
2018-03-09 16:13:00通过配置数据库连接信息和要执行的sql语句,可实现定时执行多个sql语句。 所要执行的语句只能是写死的,可支持sqlserver mysql oracle。 配置说明: config/sys.properties 中指定数据库类型及连接信息,执行间隔... -
Java执行sql语句并获取指定返回值
2021-03-09 00:12:252、java.sql.Statement 返回键获取: a: 使用JDBC 3.0提供的 getGeneratedKeys(推荐使用) Statement stmt = ... ; stmt.executeUpdate("INSERT INTO table_name(......) VALUES(......)", Statement.RETURN_...当我们插入一条数据的时候,我们很多时候都想立刻获取当前插入的主键值返回以做它用。我们通常的做法有如下几种:
1、先 select max(id) +1 ,然后将+1后的值作为主键插入数据库;
2、使用特定数据库的 auto_increment 特性,在插入数据完成后,使用 select max(id) 获取主键值;
3、对于Oracle,使用 sequence 获取值。
对于以上3种方法都无法绝对保证在高并发情况下的操作的原子性。
现记录以下几种获取数据库主键值方法:
1、数据库原生支持的sql方法:
SQLServer:
INSERT INTO table_name (.....) VALUES(......) SELECT @@IDENTITY AS aliasname;
上面的语句相当于查询语句,从结果集中使用 getXXX(aliasname) 方法获取主键值。
Oracle:
INSERT INTO table_name(......) VALUES(......) RETURNING[primaryKey INTO]:aliasname;
也是相当于查询语句,从结果集中使用 getXXX(aliasname) 方法获取主键值。
2、java.sql.Statement 返回键获取:
a: 使用JDBC 3.0提供的 getGeneratedKeys(推荐使用)
Statement stmt = ... ;
stmt.executeUpdate("INSERT INTO table_name(......) VALUES(......)", Statement.RETURN_GENERATED_KEYS);
ResultSet rs = stmt.getGeneratedKeys();
int keyValue = -1;
if (rs.next()) {
keyValue = rs.getInt(1);
}
b:使用特定数据库特有的SQL
Statement stmt = ... ;
stmt.executeUpdate("INSERT INTO table_name(......) VALUES(......)", Statement.RETURN_GENERATED_KEYS);
ResultSet rs = stmt.executeQuery("SELECT LAST_INSERT_ID()");
int keyValue = -1;
if (rs.next()) {
keyValue = rs.getInt(1);
}
那么现在我就一个例子来看一下原生的sql怎么能得到执行的返回结果
项目背景:数据库是oracle数据库,id生成规则是通过触发器插入数据的时候自动增长,所以在插入数据的时候在sql中就不需要指明id值。但是另外一张表需要引用这个id值作为外键,那么就必须获得被引用的这个表的ID,为了避免并发问题,我们只能在插入前面那张表的时候就获得他的ID,所以我使用了下面的方法来处理。
Connection con = DBConnector.getconecttion(); // 取得一个数据库连接
CallableStatement cst = null;
con.setAutoCommit(false);
String insertSql = "begin insert into TABLE (field_0,field_1) values (value_0,value_1) returning id into ?;end; ";
try {
cst = con.prepareCall(insertSql); //执行存储过程
cst.registerOutParameter(1, Types.INTEGER); //为存储过程设定返回值
int count = cst.executeUpdate(); //得到预编译语句更新记录或删除操作的结果
int id = cst.getInt(1); //得到返回值
System.out.println("成功执行了:" + count + "条数据,其ID值:" + id);
} catch (SQLException e1) {
con.rollback();
con.setAutoCommit(true);
}finally{
con.commit();
con.close();
}
-
JAVA中直接执行sql语句示例
2021-07-15 09:13:05import java.sql.*; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class Test { //执行select private List<Map<String, Object>>...代码:
import java.sql.*; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class Test { //执行select private List<Map<String, Object>> executeGet(String schema, String sql) throws SQLException { Statement statement = null; ResultSet resultSet = null; try { Connection connection = getConnection(); connection.setCatalog(schema); statement = connection.createStatement(); resultSet = statement.executeQuery(sql); ResultSetMetaData metaData = resultSet.getMetaData(); List<Map<String, Object>> resultList = new ArrayList<>(); while (resultSet.next()) { Map<String, Object> dataMap = new HashMap<>(); for (int i = 1; i <= metaData.getColumnCount(); i++) { dataMap.put(metaData.getColumnLabel(i), resultSet.getObject(i)); } resultList.add(dataMap); } return resultList; } catch (Exception e) { throw e; } finally { try { if (resultSet != null) { resultSet.close(); } if (statement != null) { statement.close(); } } catch (SQLException e) { } } } //执行update,insert,delete private int executeUpdate(String schema, String sql) throws SQLException { Statement statement = null; try { Connection connection = getConnection(); connection.setCatalog(schema); statement = connection.createStatement(); return statement.executeUpdate(sql); } catch (Exception e) { throw e; } finally { try { if (statement != null) { statement.close(); } } catch (SQLException e) { } } } //将结果集转换为对象 public static <T> List<T> parserDbo(List<Map<String, Object>> dboMapList, Class<T> dboClass, boolean canEmpty) throws Exception { if (CollectionUtil.isEmpty(dboMapList)) { if (!canEmpty) { throw new Exception(""); } dboMapList = new ArrayList<>(); } List<T> resultList = new ArrayList<>(); for (Map<String, Object> dboMap : dboMapList) { resultList.add(BeanUtil.mapToBean(dboMap, dboClass, false)); } return resultList; } }
注意:BeanUtil.mapToBean这个方法,需要导入以下依赖
<dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.7.4</version> </dependency>
-
java代码中的sql语句处理
2018-03-06 17:05:33该资源能够帮助使用者快速将嵌有sql语句的Java代码转换为纯sql语句,也可以将纯sql语句转换为java拼接的方式。 -
java后台如何执行sql语句
2021-01-19 17:29:36// 执行更新语句 LianaDBAccess.executeSQLUpdate(connection,"UPDATE CB_TO SET TO_TO='" + to + "'"); connection.commit(); return true; } catch (TranFailException e) { // TODO Auto-...一、查询
String SEARCH = "select TOK_TO from CB_TO "; private String getTo() { String to = ""; // 建立数据库连接 try { Connection connection = null; PreparedStatement statement = null; ResultSet resultSet = null; connection = LianaDBAccess.getConnection(); statement = connection.prepareStatement(SEARCHTOKEN); resultSet = statement.executeQuery(); if (resultSet.next()) { to = resultSet.getString(1); } connection.close(); } catch (TranFailException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return to; }
二、更新
private boolean updateTo(String to) { Connection connection = null; // 建立数据库连接 try { connection = LianaDBAccess.getConnection(); // 执行更新语句 LianaDBAccess.executeSQLUpdate(connection,"UPDATE CB_TO SET TO_TO='" + to + "'"); connection.commit(); return true; } catch (TranFailException e) { // TODO Auto-generated catch block e.printStackTrace(); JOptionPane.showMessageDialog(null, "更改发生异常"); return false; } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); JOptionPane.showMessageDialog(null, "更改发生异常"); return false; } finally { try { LianaDBAccess.releaseConnection(connection); } catch (TranFailException ex) { Trace.logError(Trace.COMPONENT_ACTION, "更改发生异常", ex); return false; } } }
-
JAVA程序卡在sql语句不执行了
2021-02-28 11:38:17} } } 结果是::我试了什么语句都不好使,怎么回事啊,在线等 开始连接 连接成功! 创建stm成功 public class DBManager { private DBManager() {} static{ try { Class.forName(DBDriverClass); } catch ... -
使用JAVA运行SQL
2020-08-20 10:24:38Oracle JDBC 驱动程序:允许java程序中的JDBC语句访问Oracle数据库。 java中使用JDBC,必须将对应的JDBC包导入程序:import java.sql.* java有两套jdbc包: 标准JDBC: 允许程序访问大多数数据库的基本功能 Oracle的... -
java生成SQL语句
2021-02-27 14:06:05代码如下:/** * 动态生成SQ及SQL参数L* @param ve 接收到的消息的CHGLIST* @param paramList MQ消息中的SQL参数* @param t 泛型对象* @param table 数据表* @param list 可执行SQL语句集合* @return */public ... -
java中怎么执行sql语句
2017-08-20 08:54:06如图我想在 java代码的方法里执行这条sql插入语句,把一条记录save进oracle数据库,菜鸟不知道怎么写,求帮助 -
java批量执行多条Sql语句
2021-03-08 14:48:56/** * 执行多条更新的Sql语句 */public boolean UpdataSql(String sql[]){TestConnect.Connect(); try { sta = TestConnect.connection.createStatement(); for(int i=0;i s... -
java代码实现的sql语句效果
2019-04-10 01:18:57NULL 博文链接:https://lkf009.iteye.com/blog/1670754 -
JAVA连接SQL数据库 如何让JAVA的输出具体的执行的SQL语句
2021-03-16 19:18:47JAVA连接SQL数据库 如何让JAVA的输出具体的执行的SQL语句JAVA连接SQL数据库 如何让JAVA的输出具体的执行的SQL语句相关问题:匿名网友:import java.sql.ResultSet; //都是导入一些下面需要用到的类String ConnStr=... -
Java中批量执行sql语句
2021-02-12 22:14:14在我们实际项目开发过程中,可能有的功能在后台需要执行几条sql语句甚至需要批量的执行一些sql语句,如果是循环一条一条执行,我想大家都知道这样做的效率特别低,尤其是批量sql时,但是如果我们先循环把整个的拼成... -
10种Java开发者编写SQL语句时常见错误
2020-09-03 10:36:21主要介绍了10种Java开发者编写SQL语句时常见错误,当Java开发人员编写SQL语句时,一切都变得不同了。SQL是一种说明式语言,与面向对象思想和命令式思想无关,需要的朋友可以参考下 -
Java JDBC中的批处理SQL语句的详解
2022-05-05 15:10:27一、JDBC中批处理SQL语句的介绍 二、使用批量处理和非批量处理,进行演示,看具体的耗时区别 public class Batch_ { @Test public void noBatch() throws Exception { Connection connection = JDBCUtils.get... -
在Spring框架中,使用Java代码执行sql语句
2021-01-09 11:36:54Spring 中提供了一个 jdbc 脚本执行器,使用这个工具可以非常方便的运行一个 sql 脚本文件,下面是这个方法: ScriptUtils.executeSqlScript() 只需要传入它需要的参数即可。 下面代码运行 sql 目录中的四个脚本程序... -
Java 使用注解拼接SQL语句
2016-11-18 17:36:47使用Java自定义注解来拼接SQL查询语句,方便使用。 -
三种执行SQL语句的的JAVA代码
2021-01-19 21:59:04问题描述:连接数据库,执行SQL语句是必不可少的,下面给出了三种执行不通SQL语句的方法。1.简单的Statement执行SQL语句。有SQL注入,一般不使用。public static void testStatement() throws Exception{Statement ... -
java 用jdbc连接mysql 并执行sql语句
2021-04-12 23:11:56//java 用jdbc连接mysql 并执行sql语句import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;import java.sql.Statement;public class JDBCMySQL {public static final String ... -
java执行SQL语句实现查询的通用方法
2015-08-22 09:42:09查询的结果集保存并返回调用函数 结果集中数据存储到类型的.../* * 执行sql查询语句 */ public static Vector executeQuery(Class clazz, String sql, Object... args) { Connection conn = null; PreparedStat -
如何从Java执行多个SQL语句
2021-03-08 14:49:09批处理允许您将相关的SQL语句分组为一个批处理,并通过一次调用将其提交给数据库。参考当您一次将多个SQL语句发送到数据库时,可以减少通信开销,从而提高性能。不需要JDBC驱动程序即可支持此功能。您应该使用该... -
java – SQL如何使用一个SQL语句更新表行
2021-02-12 18:27:56这是一个基本的例子:我想创建一个用预准备语句更新值的java方法.示例代码:更新的代码public void updateDBSettings() throws SQLException {String SQL_Statement = null;if (ds == null) throw new SQLException... -
java执行sql语句一直没有响应
2016-04-08 09:44:34在昨天晚上,我运行一条很简单的sql语句。之前是没有问题。但是后来运行,却迟迟没有响应。 苦想了一个晚上,觉得没什么问题,第二天,我用plsql执行这条语句,发现一直显示的是 心想,这么一条简单的语句,为什么都... -
Java连接mysql数据库并执行sql语句
2020-06-22 16:25:46弄这个主要是为了方便测试单个sql的性能,尝试用java连接数据库并查询,将结果的JDBC ResultSet结果集转成List并输出。 import java.sql.*; import java.sql.DriverManager; import com.mysql.jdbc.Connection; ... -
Java实现关系型数据库工具类JdbcUtils系列四:PreparedStatement执行sql语句实现查询
2021-12-11 17:08:04Java实现关系型数据库工具类JdbcUtils系列四:PreparedStatement执行sql语句实现查询一、建表语句二、JdbcUtils实现建立连接和关闭连接三、PreparedStatement实现查询 一、建表语句 CREATE TABLE `stuinfo` ( `id` ... -
mybatis拦截器修改执行sql语句
2021-01-04 15:25:391.网上搜索了很多,几乎都是能修改sql, 但是修改后的sql不生效,还是执行原来的sql. 2.这个版本亲测可以生效。 3.支持分页查询 -
java动态拼接sql语句并且执行时给sql语句的参数赋值
2021-03-09 07:46:52问题在这里举一个例子,比如我要做一个多条件模糊查询,用户输入的时候有可能输入一个条件,也有可能输入两个条件,这时执行查询的sql语句就不确定了,但可以用动态拼接sql语句来解决这个问题。解决方法1.就拿我上面...