apache java mysql_JAVA 连接 MySql

//文件路径 D:\ApacheServer\web_java\HelloWorld\src\com\test\TestMysql.java

packagecom.test;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.sql.Statement;public classTestMysql {public voidtestfun() {//需要下载 MySQL 驱动 jar 包,下载地址https://mvnrepository.com/artifact/mysql/mysql-connector-java,这里用到的是 mysql-connector-java-8.0.17.jar,下载的 jar 包 要放在 Tomcat 安装目录下的 lib 文件夹内,这里路径是 D:\ApacheServer\apache-tomcat\lib\mysql-connector-java-8.0.17.jar//连接 MySQL 需要 MySQL 的时区和 java 一致(MySQL 默认 UTC 时区),这里本地是北京时区。修改 MySQL 配置文件 my.ini 在 [mysqld] 项下添加一行 default-time-zone = '+8:00' 重启 MySQL 即可。如果不能修改MySQL配置文件,则将如下 jdbc:mysql://localhost:3306/testdb 改为 jdbc:mysql://localhost:3306/testdb?serverTimezone=UTC 亦可

try{//注册 JDBC 驱动器//如果下载的 MySQL jar 包是 5 系列版本,则需要用 com.mysql.jdbc.Driver 注册驱动,而且必须写//Class.forName("com.mysql.jdbc.Driver");//MySQL jar包 6 以上版本用 com.mysql.cj.jdbc.Driver 注册,或者不写也可,这里没有写,已注释掉//Class.forName("com.mysql.cj.jdbc.Driver");//打开一个连接

Connection conn = null;//localhost 为数据库连接地址,3306 端口号,testDB 为数据库名称

String db_host = "jdbc:mysql://localhost:3306/testdb";//用户名

String user = "root";//密码

String password = "123456";

conn=DriverManager.getConnection(db_host,user,password);//==================================================== Statement 类处理//Statement 对象执行查询 SQL 语句

Statement statement =conn.createStatement();

String sql_sel= "SELECT id, name, age FROM test_table";

ResultSet result=statement.executeQuery(sql_sel);//遍历结果集

int i = 1;while(result.next()){int id = result.getInt("id");

String name= result.getString("name");int age = result.getInt("age");

System.out.println("第 " + i + "行 id : " + id + " name : " + name + " age : " +age);

i++;

}//==================================================== PreparedStatement 类处理//PreparedStatement 执行插入语句效果更好,原因:1可以写动态参数化的查询,2PreparedStatement比 Statement 更快,3PreparedStatement可以防止SQL注入式攻击//preparedStatement对象的 executeUpdate() 方法可执行 insert,update,delete 语句以及 SQL DDL(如建表,改表,删除表等), executeQuery() 方法执行select语句,execute()执行所有语句,效率也最慢//============================ executeUpdate 方法//编写预处理 SQL 语句

String sql_ins= "INSERT INTO `test_table`(id, name, age) VALUES(?, ?, ?)";

PreparedStatement preparedStatement=conn.prepareStatement(sql_ins);

preparedStatement.setInt(1, 3); //插入表数据的 id

preparedStatement.setString(2, "testName"); //名称

preparedStatement.setInt(3, 40); //年龄//返回值是一个整数,指示受影响的行数(即更新计数)建表,删表等不操作行的语句总返回 0。

int updateCount =preparedStatement.executeUpdate();

System.out.println("插入结果 " +updateCount);//============================ executeQuery 方法//执行 select 语句

preparedStatement =conn.prepareStatement(sql_sel);//获取查询结果,result 遍历查询结果与之前 Statement 类方式一致

result =preparedStatement.executeQuery();//============================ execute 方法

preparedStatement =conn.prepareStatement(sql_sel);//execute 可用于执行任何SQL语,返回一个 boolean 值,如果执行后第一个结果(有可能返回的是多个结果集合)是 ResultSet(即查询语句结果),则返回 true,否则返回 false。

boolean isResult =preparedStatement.execute();//如果 execute() 执行的 sql 语句能返回多个结果集合时,PreparedStatement 对象获取下个 getResultSet() 或者 getUpdateCount() 前要先执行 getMoreResults() 使指针下移,然后再执行 getResultSet() 或 getUpdateCount() 获取当前指针指向结果//preparedStatement.getMoreResults();//多个结果集时,获取下一个结果时才执行,如在 while 循环语句里用,获取第一个结果时不需要执行此语句

if(isResult) {//如果结果集当前指针指向的返回结果是个 select 查询结果,用 getResultSet 获取,如果执行的是更新语句,则返回的是更新计数,这时就要用 getUpdateCount来获取

result =preparedStatement.getResultSet();//...

}else{//当某个过程返回两个更新计数,则首先调用方法getUpdateCount()

updateCount =preparedStatement.getUpdateCount();

System.out.println("插入结果 " +updateCount);

}//完成后关闭

preparedStatement.close();

result.close();

statement.close();

conn.close();

}catch(SQLException sqlException) {//处理 JDBC 错误

sqlException.printStackTrace();

}catch(Exception exception) {//处理 Class.forName 错误

exception.printStackTrace();

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值