1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 使用Java语言开发工具idea连接MySQL数据库的基本步骤及操作实例

使用Java语言开发工具idea连接MySQL数据库的基本步骤及操作实例

时间:2024-02-23 18:26:40

相关推荐

使用Java语言开发工具idea连接MySQL数据库的基本步骤及操作实例

Java连接MySQL数据库并进行一些基本操作以及导入jar包的两种方式

其实,任何开发工具连接数据库无非就是三步:1.安装驱动。2.加载驱动,创建连接对象。3.创建对象操作游标。4.游标调用函数完成执行SQL语句。但是在各种语言开发工具进行连接过程中,这些过程操作又有一定的差异。接下来我们来了解Java语言开发工具idea连接数据库的基本操作。

首先进行了解,什么是JDBC。JDBC是一套用于执行SQL语句的Java API,应用程序可通过这套API连接到关系数据库。并使用SQL语句完成对数据库中数据的查询、新增、更新、删除等操作。应用程序使用JDBC访问特定的数据库时,只需要通过不同的数据库驱动与其对应的数据库进行连接,再进行相应的操作即可。

JDBC常用的API,主要位于java.sql包中,该包定义了一系列访问数据库的接口和类。 Driver接口:Driver接口是所有JDBC驱动程序必须实现的接口,该接口专门提供给数据库厂商使用,即将所使用的数据库驱动程序加载到项目classpath中。也就是导入jar包:

导包的具体过程为:1.File-->Project Setting-->Moudles-->dependencies-->点击12 version ……-->+ 然后选择完之后勾选,最后Apply即可。

或者

2.在src文件夹下-->右击-->Open Moudles Settings dependencies-->点击12 version ……-->+ 然后选择完之后勾选,最后Apply即可。

具体位置如图所示DriverManager接口:DriverManager类用于加载数据库驱动并创建与数据库的连接。通过DriverManager类中的静态方法getConnection(String url,String user,String pwd)来建立和数据库的连接,并返回表述连接的Connection对象。 Connection接口:Connection接口代表Java程序与数据库的连接对象。只有获得该连接对象之后,才能访问数据库,操作数据表。相当于游标对象。Statement crestStatement()方法:

通过Connection接口调用crestStatement方法。返回一个向数据库发送语句的Statement对象,即创建游标对象。 PreparedStatement preparedStatement(String sql)方法:

该方法用于返回一个PreparedStatement对象,该对象用于向数据库发送参数化的SQL语句。 CallableStatement prepareCall(String sql)方法:

该方法用于返回一个CallableStatement对象,该对象用于调用数据库中的存储过程。 Statement接口:Statement接口是执行Java数据库操作的一个重要接口,它用于执行静态的SQL语句,并返回一个结果对象,(通过Connection接口调用crestStatement方法获得)。

执行SQL语句的常用方法:

Boolean execute(String sql)方法:用于执行各种SQL语句,返回一个Boolean类型的值,如果为true,表示执行的SQL语句有查询结果,可通过Statement的getResult()方法获得查询结果。 int executeUpdate(String sql)方法:用于执行SQL中的insert、update、delete语句,该方法返回一个int类型的值,表示数据库中should该SQL语句影响的记录条数。 ResultSet executeQuery(String sql)方法:用于执行SQL中的select语句,该方法返回一个表示查询结果的ResultSet对象。 PrepareStatement接口:Statement接口封装了JDBC执行SQL语句的办法,可执行SQL语句,但是在实际开发过程中常用程序中的变量作为查询条件,此时使用Statement接口代码SQL语句过于繁琐;而PreparedStatement接口是Statement接口的子接口,扩展了带有参数的SQL语句的操作,应用接口中的SQL语句可以使用占位符"?"来代替参数,通过setXxx()方法为SQL语句参数赋值。int executeUPdate()方法:

在此PreparedStatement对象中执行SQL语句,该语句必须是一个DML语句(数据库操作语句增删改查)或者是无返回值的SQL语句,如DDL语句(create建表语句、drop删表语句、alter(修改字段类型语句)等。 ResultSet executeUpdate()方法:

在此PreparedStatement对象中执行SQL查询,该方法返回的是ResultSet对象。 void setInt(int parameterIndex,int x)方法:将指定参数设置为给定的int值。 void setFloat(int parameterIndex,float x)方法:

将指定参数设置为给定的float值。 void setString(int parameterIndex,String x)方法:

将指定参数设置为给定的String值。 void setDate(int parameterIndex,Date x)方法:

将指定参数设置为给定的Date值。 void addBatch()方法:

将一组参数添加到此PreparedStatement对象的批处理命令中。 void setCharacterStream(int parameterIndex,java.io.Reader reader,int length)方法:

将指定的输入流写入数据库的文本字段。 void setBinaryStream(int parameterIndex,java.io.InputStream x,int length)方法:

将二进制的输入流数据写入到二进制字段中。 ResultSet接口:用于保存JDBC执行查询语句时返回的结果集,该结果集封装在一个逻辑表格中。在ResultSet接口内部有一个指向表格数据行的游标。ResultSet对象初始化时,游标在表格的第一行之前,调用next()方法可将游标移动到下一行。如果下一行没有数据,则返回false。String getString(int columnIndex)方法:

用于获取指定字段的String类型的值,参数columnIndex代表字段的索引。 String getString(int columnIndex)方法:

用于获取指定字段的String类型的值,参数columnIndex代表字段的索引。 String getString(String columnName)方法:

用于获取指定字段的String类型的值,参数columnName代表字段的名称。 int getInt(int columnIndex)方法:

用于获取指定字段的int类型的值,参数columnIndex代表字段的索引。 String getInt(String columnName)方法:

用于获取指定字段的int类型的值,参数columnName代表字段的名称。 Date getDate(int columnIndex)方法:

用于获取指定字段的Date类型的值,参数columnIndex代表字段的索引。 Date getDate(int columnName)方法:

用于获取指定字段的Date类型的值,参数columnName代表字段的名称。 boolean next()方法:

将游标从当前位置指向下移一行 boolean absolute(int row)方法:

将游标移动到此ResultSet对象的指定行。 void afterLast()方法:

将游标移动到此ResultSet对象的末尾,即最后一行之后。 void beforeFirst()方法:

将游标移动到此ResultSet对象的开头,即第一行之前。 boolean previous()方法:

将游标移动到此ResultSet对象的上一行。 boolean last()方法:

将游标移动到此ResultSet对象的最后一行。

在了解了这些之后,接下来看代了解连接步骤:

1.导入数据库驱动jar包:(加载数据库驱动通常使用Class类的静态方法forName()方法来实现,具体实现方式见下图代码。)

2.通过DriverManager类获取数据库连接,创建数据库对象。

3.通过数据库对象调用createStatement()方法创建游标对象。通过游标对象执行SQL语句。

4.通过ResultSet对象获得执行SQL语句返回的结果集。

5.关闭连接,释放资源。通过try……catch……finally代码块统一关闭资源。(依次关闭ResultSet结果集资源、游标对象、数据库连接对象)。

package Other;import java.sql.*;import static java.lang.Class.forName;public class JDBC_Connector {public static void main(String[] args) throws SQLException{//创建java程序与数据库的连接对象Connection connection = null;//创建执行静态SQL语句的接口对象Statement statement = null;//创建游标对象,返回查询结果集ResultSet resultSet = null;//将MySQL数据库驱动名称封装在字符串中String driver = "com.mysql.cj.jdbc.Driver";//指定使用数据库的路径、编码格式、时区,并以字符串进行封装String url = "jdbc:mysql://localhost:3306/db?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC&useSSL=false";//指定登录账户String user = "root";//指定账户密码String psw = "hcy514";//加载数据库驱动try {Class.forName(driver);} catch (ClassNotFoundException e) {e.printStackTrace();}//连接数据库connection = DriverManager.getConnection(url,user,psw);//通过Connection对象获取Statement对象statement = connection.createStatement();String sql = "select * from tb_admin";resultSet = statement.executeQuery(sql);System.out.println("id\t|\tuserName\t|\tuserPsw");while(resultSet.next()){int id = resultSet.getInt("id");String userName = resultSet.getString("userName");String userPsw = resultSet.getString("userPsw");System.out.println(id+"\t|\t\t"+userName+"\t\t|\t"+userPsw);}if (resultSet!=null)resultSet.close();if (statement!=null)statement.close();if (connection!=null)connection.close();}}

运行结果为:

上述有很多方法我并没有进行使用。

这一套连接操作体系,可统一封装在一个类中,但需要使用时,直接通过创建类对象调用相关方法即可。下图为我经常使用的方法封装在了一个类中,代码附上:

package com.other;import com.mchange.boPooledDataSource;import com.models.TbAdmin;import mons.beanutils.ConvertUtils;import java.lang.reflect.Field;import java.lang.reflect.Method;import java.sql.*;import java.util.ArrayList;import java.util.List;//改进的DBUtils:1.所有的数据库操作都使用了连接池技术 2.查询记录返回值中,不再需要强制转换public class DBUtils1 {Connection connection = null;Statement statement = null;ResultSet resultSet = null;String driver = "com.mysql.cj.jdbc.Driver";String url = "jdbc:mysql://localhost:3306/db?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC&useSSL=false";String user = "root";String psw = "Sa123456";public void close() {try {if (resultSet != null && !resultSet.isClosed())resultSet.close();if (statement != null && !statement.isClosed())statement.close();if (connection != null && !connection.isClosed())connection.close();} catch (Exception e) {e.printStackTrace();}}//通过连接池获取connection对象public Connection getConnection() {Connection connection = null;ComboPooledDataSource cpds = new ComboPooledDataSource();try {cpds.setDriverClass(driver);cpds.setJdbcUrl(url);cpds.setUser(user);cpds.setPassword(psw);//最大线程池中连接对象10cpds.setMaxPoolSize(10);cpds.setMinPoolSize(1);connection = cpds.getConnection();} catch (Exception e) {e.printStackTrace();}return connection;}public int executeUpdate(String sql) {int result = 0;try {Class.forName(driver);//加载驱动connection = DriverManager.getConnection(url, user, psw);//打开数据库,返回连接数据库对象statement = connection.createStatement();//获取执行sql命令的对象result = statement.executeUpdate(sql);} catch (Exception e) {e.printStackTrace();} finally {close();}return result;}public ResultSet executeQueryResultSet(String sql) {try {Class.forName(driver);//加载驱动connection = DriverManager.getConnection(url, user, psw);//打开数据库,返回连接数据库对象statement = connection.createStatement();//获取执行sql命令的对象resultSet = statement.executeQuery(sql);} catch (Exception e) {e.printStackTrace();}return resultSet;}//查找单条记录,封装在对象中public <T> T executeQueryBean(String sql, Class<T> clzss) {T object = null;try {Class.forName(driver);connection = DriverManager.getConnection(url, user, psw);// connection = getConnection();statement = connection.createStatement();resultSet = statement.executeQuery(sql);ResultSetMetaData resultSetMetaData = resultSet.getMetaData();if (resultSet.next()) {object = clzss.newInstance();for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {String methodName = resultSetMetaData.getColumnName(i);Field field = clzss.getDeclaredField(methodName);methodName = "set" + methodName.substring(0, 1).toUpperCase() + methodName.substring(1);Method method = clzss.getMethod(methodName, field.getType());method.invoke(object, ConvertUtils.convert(resultSet.getString(i), field.getType()));//将数据库中的值的类型转换成类方法中的形参类型}}} catch (Exception e) {e.printStackTrace();}return object;}//查找多条记录,封装在列表中public <T> List<T> executeQueryBeans(String sql, Class<T> clzss) {List<T> list = new ArrayList<>();try {Class.forName(driver);connection = DriverManager.getConnection(url, user, psw);// connection=getConnection();statement = connection.createStatement();resultSet = statement.executeQuery(sql);ResultSetMetaData resultSetMetaData = resultSet.getMetaData();while (resultSet.next()) {T object = clzss.newInstance();for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {String methodName = resultSetMetaData.getColumnName(i);Field field = clzss.getDeclaredField(methodName);methodName = "set" + methodName.substring(0, 1).toUpperCase() + methodName.substring(1);Method method = clzss.getMethod(methodName, field.getType());method.invoke(object, ConvertUtils.convert(resultSet.getString(i), field.getType()));//将数据库中的值的类型转换成类方法中的形参类型}list.add(object);}} catch (Exception e) {e.printStackTrace();}if (list.size() == 0)list = null;return list;}}

需要导入的jar包为:

如有疑问,欢迎在评论区下方留言交流。若觉得内容稍可,请留下你们的

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。