赞
踩
DriverManager:用于加载驱动和创建数据库连接,实际中采用Class.forName("")
来加载驱动,DriverManager用来创建与数据库的连接对象Connection。
URL:
常用数据库URL地址的写法:
Oracle写法:jdbc:oracle:thin:@localhost:1521:test
SqlServer写法:jdbc:microsoft:sqlserver://localhost:1433; DatabaseName=test
MySql写法:jdbc:mysql://localhost:3306/test?
DM写法:jdbc:dm://localhost:5236/schema=test
在连接达梦数据时schema指定模式,schema=test
表示使用test模式,如果不使用schema则表示默认使用的是SYSDBA模式。
Connection:数据库连接对象,Collection是数据库编程中最重要的一个对象,客户端与数据库所有交互都是通过connection对象完成,常用方法如下:
createStatement()
:创建向数据库发送sql的statement对象。
prepareStatement(sql)
:创建向数据库发送预编译sql的PrepareSatement对象。
setAutoCommit(boolean autoCommit)
:设置事务是否自动提交。
commit()
:在链接上提交事务。
rollback()
:在此链接上回滚事务。
Statement:象用于向数据库发送SQL语句, Statement对象常用方法如下:
executeQuery(String sql)
:用于向数据发送查询语句。
executeUpdate(String sql)
:用于向数据库发送create、insert、update或delete语句,返回值表示你update影响的纪录条数,如果是-1表示无影响,如果是建表等语句,返回0。
execute(String sql)
:用于向数据库发送任意sql语句
addBatch(String sql)
:把多条sql语句放到一个批处理中。
executeBatch()
:向数据库发送一批sql语句执行。
返回值:executeUpdate();
PreparedStatement:作为Statement的子类,相对于Statement对象而言:PreperedStatement可以避免SQL注入的问题。PreparedStatement可对SQL进行预编译,从而提高数据库的执行效率。并且PreperedStatement对于sql中的参数,允许使用占位符的形式进行替换,简化sql语句的编写。
ResultSet:Jdbc程序中的ResultSet用于代表Sql语句的执行结果。Resultset封装执行结果时,采用的类似于表格的方式。ResultSet 对象维护了一个指向表格数据行的游标,初始的时候,游标在第一行之前,调用ResultSet.next() 方法,可以使游标指向具体的数据行,进行调用方法获取该行的数据。
ResultSet既然用于封装执行结果的,所以该对象提供的都是用于获取数据的get方法:
获取任意类型的数据
getObject(int index)
getObject(string columnName)
获取指定类型的数据,例如:
getString(int index)
getString(String columnName)
ResultSet还提供了对结果集进行滚动的方法:
next()
:移动到下一行
Previous()
:移动到前一行
absolute(int row)
:移动到指定行
beforeFirst()
:移动resultSet的最前面。
afterLast()
:移动到resultSet的最后面
Driver = dm.jdbc.driver.DmDriver
URL = jdbc:dm://localhost:5236/useSSL=false&userUnicode=true&characterEncoding=utf8&serverTimezone=GMT
username = SYSDBA
password = wh17xktk!!
package DM8_JDBC; import java.io.IOException; import java.io.InputStream; import java.sql.*; import java.util.Properties; /** * @ClassName JdbcUtils * @Description DM8_JDBC工具 * @Author 浩儿 * @Date 2022/8/4 10:00 * @Version V1.0 */ public class JdbcUtils { private static String driver; private static String url; private static String username; private static String password; static{ try { //加载JDBC配置文件jdbc.properties InputStream jdbc = JdbcUtils.class.getClassLoader().getResourceAsStream("jdbc.properties"); Properties properties = new Properties(); properties.load(jdbc); //获取配置文件信息 driver = properties.getProperty("Driver"); url = properties.getProperty("URL"); username = properties.getProperty("username"); password = properties.getProperty("password"); //加载驱动 Class.forName(driver); } catch (IOException | ClassNotFoundException e) { e.printStackTrace(); } } //创建数据库连接对象connection public static Connection getconnection() throws SQLException { Connection con = DriverManager.getConnection(url, username, password); return con; } //释放资源 public static void release(Connection con, PreparedStatement pre, ResultSet res) throws SQLException { if (con != null){ con.close(); } if (pre != null){ con.close(); } if (res != null){ res.close(); } } }
package DM8_JDBC; import org.junit.jupiter.api.Test; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; /** * @ClassName Test * @Description JDBC连接达梦数据库测试 * @Author 浩儿 * @Date 2022/8/4 10:39 * @Version V1.0 */ public class DmTest { public static PreparedStatement pre; public static ResultSet re; //数据库查询 @Test public void TestSelect() throws SQLException { //创建数据库连接 Connection con = JdbcUtils.getconnection(); if (con != null){ System.out.println(("数据库连接成功")); }else { System.out.println(("数据库连接失败")); } String sql = "select * from t1"; //执行SQL pre = con.prepareStatement(sql); //返回查询到的结果集 re = pre.executeQuery(); //循环输出结果集 while (true) { if (!re.next()) break; System.out.println("id:" + re.getObject("id")+"\t"+"name:" + re.getObject("name")); System.out.println(); } //释放资源 JdbcUtils.release(con,pre,re); } @Test //插入数据 public void testInsert() throws SQLException { //创建数据库连接 Connection con = JdbcUtils.getconnection(); String sql = "insert into t1 values(1,'xktk'),(2,'xktk2')"; PreparedStatement pre = con.prepareStatement(sql); int i = pre.executeUpdate(); if (i != 0){ System.out.println("插入成功"); }else { System.out.println("插入失败"); } JdbcUtils.release(con,pre,re); } @Test //更新数据 public void testUpdate() throws SQLException { Connection con = JdbcUtils.getconnection(); String sql = "update t1 set name = 'xswl' where name = 'xktk'"; pre = con.prepareStatement(sql); int i = pre.executeUpdate(); if (i != 0){ System.out.println("修改成功"); }else { System.out.println("修改失败"); } JdbcUtils.release(con,pre,re); } @Test //删除数据 public void testDelete() throws SQLException { Connection con = JdbcUtils.getconnection(); String sql = "delete from t1 where name = 'xktk2'"; pre = con.prepareStatement(sql); int i = pre.executeUpdate(); if (i != 0){ System.out.println("删除成功"); }else { System.out.println("删除失败"); } JdbcUtils.release(con,pre,re); } @Test //创建表 public void TestCreate() throws SQLException { Connection con = JdbcUtils.getconnection(); String sql = "create table t2 (id int,name varchar)"; pre = con.prepareStatement(sql); int i = pre.executeUpdate(sql); //返回值表示你update影响的纪录条数,如果是-1表示无影响,如果是建表等语句,返回0。 if (i == 0){ System.out.println("创建成功"); }else { System.out.println("创建失败"); } JdbcUtils.release(con,pre,re); } }
为了减少数据库增删查改时代码的编写量,和不必要的重复,可以考虑创建一个公共的查询方法和增、删、改方法。
这里引入一个object类型数组用来指定SQL中的条件值。
//数据库共查询方法 public static ResultSet commentSelect(Connection con, PreparedStatement pst , String sql, Object[] objects) throws SQLException { pst = con.prepareStatement(sql); for (int i = 0;i <= objects.length-1 ;i++){ pst.setObject(i+1,objects[i]); } ResultSet re = pst.executeQuery(); return re; } //公共增、删、改方法 public static void update(Connection con,PreparedStatement pre,String sql,Object[] objects) throws SQLException { pre = con.prepareStatement(sql); for (int i = 0; i <= objects.length-1; i++){ pre.setObject(i+1,objects[i]); } int i = pre.executeUpdate(); if (i > 0){ System.out.println("更新成功"); } }
查询测试
@Test
//采用公共类来查询数据
public void commentSelect() throws SQLException {
Object[] object = {"信息管理与信息系统"};
Connection con = JdbcUtils.getconnection();
String sql = "select STU_NAME from T_STUDENT where SYSDBA.T_STUDENT.STU_MAJOR = ?";
re = JdbcUtils.commentSelect(con, pre, sql, object);
while (true) {
if (!re.next()) break;
System.out.println("STU_NAME:" + re.getObject(1));
System.out.println();
}
JdbcUtils.release(con,pre, DmTest.re);
}
@Test //使用测试statement查询数据 public void selectStatement() throws SQLException { Connection con = JdbcUtils.getconnection(); Statement statement = con.createStatement(); String sql = "select * from T_STUDENT"; ResultSet re = statement.executeQuery(sql); while (true){ if (!re.next()) break; System.out.println("姓名:"+re.getObject("STU_NAME")+"\t"+"学号:"+re.getObject("STU_NUMBER")); } //关闭资源 if (con != null){ con.close(); } if (statement != null){ statement.close(); } if (re != null){ re.close(); } } @Test //使用测试statement插入数据 public void insertStatement() throws SQLException { Connection con = JdbcUtils.getconnection(); Statement statement = con.createStatement(); String sql = "insert into t2 values(1,'xswl'),(2,'xktk')"; int i = statement.executeUpdate(sql); if (i > 0){ System.out.println("插入成功"); }else { System.out.println("插入失败"); } //关闭资源 if (con != null){ con.close(); } if (statement != null){ statement.close(); } if (re != null){ re.close(); } }
修改、更新、删除的操作与插入类似,这里就不再提供示例。
注意:需手动导入dm8jdbc驱动
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>mybatis</artifactId> <groupId>org.example</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>DM8-Mybatis</artifactId> <dependencies> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.6</version> </dependency> <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>1.3.5</version> </dependency> </dependencies> <build> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>true</filtering> </resource> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>true</filtering> </resource> </resources> </build> </project>
driver = dm.jdbc.driver.DmDriver
url = jdbc:dm://localhost:5236/useSSL=false&userUnicode=true&characterEncoding=utf8&serverTimezone=GMT
username = SYSDBA
password = wh17xktk!!
package pojo; import java.util.Date; /** * @ClassName User * @Description 用户实体类 * @Author 浩儿 * @Date 2021/5/31 19:41 * @Version V1.0 */ public class User { private Integer id; private String userCode; private String userName; private String userPassword; private Integer gender; private Date birthday; private String phone; private String address; private Integer userRole; private Integer createdBy; private Date creationDate; private Integer modifyBy; private Date modifyDate; 有参构造 无参构造 get,set方法 tostring方法 }
这里运用到了工厂模式SqlSessionFactory
package utils; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import javax.annotation.Resource; import java.io.IOException; import java.io.InputStream; /** * @ClassName MybatisUtils * @Description mybatis工具类 * @Author 浩儿 * @Date 2021/5/31 19:44 * @Version V1.0 */ public class MybatisUtils { private static SqlSessionFactory sqlSessionFactory ; static { try { String resource = "mybatis-config.xml"; //Ressoures调用getResourceAsStream方法读取resource文件并将它加载成流 InputStream inputStream = Resources.getResourceAsStream(resource); //构建SqlSessionFactory工厂,以便获取Sqlsession.通过SqlSessionFactoryBuilder()类调用build方法构建SqlSessionFactory工厂。 sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } catch (IOException e) { e.printStackTrace(); } } //获取sqlSession并返回。通过SqlSessionFactory工厂调用openSession()方法获取Sqlsession.注意Sqlsessoin中封装了所有SQL执行命令的方法。 public static SqlSession getSession(){ return sqlSessionFactory.openSession(); } }
package dao; import pojo.User; import java.util.List; /** * @ClassName Usermapper * @Description 用户实体类 * @Author 浩儿 * @Date 2021/5/31 19:20 * @Version V1.0 */ public interface UserMapper { List<User>selectUser(); }
namespace表示命名空间即对应的接口路径,id表示要实现的方法,resultType表示结果集类型,select * from smbms_user表示数据库操作语句。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="dao.UserMapper">
<select id="selectUser" resultType="pojo.T_User">
select * from MYSQL.T_USER
</select>
</mapper>
import org.apache.ibatis.session.SqlSession; import org.junit.jupiter.api.Test; import pojo.User; import utils.MybatisUtils; import java.util.List; /** * @ClassName MybatisTest * @Description mtbatis测试 * @Author 浩儿 * @Date 2021/5/31 20:00 * @Version V1.0 */ public class MybatisTest { @Test public void selectUser(){ Gson gson = new Gson(); //调用MybatisUtils中的getSession()方法获取Sqlsession SqlSession session = MybatisUtils.getSession(); //session调用getMapper方法获取接口对象 UserMapper mapper = session.getMapper(UserMapper.class); //调用接口方法返回查询到的结果集 List<T_User> users = mapper.selectUser(); for (T_User user: users){ System.out.println(user); } String jsonListString = gson.toJson(users); System.out.println(jsonListString); session.close(); } }
如果还有任何问题,欢迎到达梦在线服务平台提问!
社区 | 达梦在线服务平台https://eco.dameng.com
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。