java连本地mysql注意事项_java数据库连接及注意事项
jdbc: java database connection,也就是java的数据库连接。
作用: 完成数据库数据和内存数据的交互。
为了屏蔽不同数据库的差异,在内存和各种数据库之间建立了一个接口标准。每个厂商按照接口的标准来实现接口类。
jdbc 是java连接数据库的一套标准。该标准中定义了一系列的接口,由数据库厂商根据自身数据库的特点提供实现类,由开发者调用。开发者根据接口调用方法,可以屏蔽不同数据库厂商的差异。这样,无论连接什么数据库都是一套API。
jdbc 操作步骤: 流操作步骤:
① 加载驱动,建立连接 1、建立流
② 执行SQL语句 2、操作流
③ 关闭连接 3、关闭
SQL注入: 在执行sql语句时,由于sql语句的值是由用户输入的,所以是以变量接收的,如果以拼接字符串方式来执行SQL语句,一旦数据中有非法字符或者有关键字时,会导致语法错误,或者执行结果不正确的情况,这称为SQL注入。
Statement和PreparedStatement的区别:
Statement是PreparedStatement 的父接口。在执行SQL语句时,只能以拼接字符串方式,拼接值。会引起SQL注入。而且效率低。
PreparedStatement,是预编译SQL语句执行对象,支持占位符方式,无论数据是什么值,都当字符串处理,不会引起SQL注入。而且效率高。
举例说明:
package数据库连接;importjava.sql.Date;/*** 公民实体类
*@authorC
**/
public classManBean {/**公民编号*/
private intid;/**姓名*/
privateString name;/**性别*/
privateString sex;/**生日*/
privateDate briyhday;public intgetId() {returnid;
}public void setId(intid) {this.id =id;
}publicString getName() {returnname;
}public voidsetName(String name) {this.name =name;
}publicString getSex() {returnsex;
}public voidsetSex(String sex) {this.sex =sex;
}publicDate getBriyhday() {returnbriyhday;
}public voidsetBriyhday(Date briyhday) {this.briyhday =briyhday;
}publicManBean(String name, String sex, Date briyhday) {super();this.name =name;this.sex =sex;this.briyhday =briyhday;
}publicManBean() {super();//TODO Auto-generated constructor stub
}
@OverridepublicString toString() {return "ManBean [id=" + id + ", name=" + name + ", sex=" + sex + ", briyhday=" + briyhday + "]\n";
}
}
强调:如果在一个类中定义了代参构造那么没有默认的无惨构造,所以必须要加上无惨构造。
importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.SQLException;/*** 所有Dao父类
*
*@authorC
**/
public classManDao {/**连接对象*/
protected Connection con = null;/**Sql语句执行对象*/
protected PreparedStatement pr = null;/**结果集对象*/
protected ResultSet rs = null;/*** 建立链接*/
public voidsetCnnonection() {//加载驱动
try{
Class.forName("com.mysql.jdbc.Driver");//建立连接//jdbc表示需要使用jdbc建立连接。mysql 表示连接数据库类型,localhost表示连接服务器的IP地址//其中localhost为本机的ip//3306表示mysql的端口号,mytest1为sql中的数据库名称,表示需要使用该类中的数据库表//characterEncoding=utf-8表示设置连接数据库的编码集
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/mytext1?characterEncoding=utf-8", "root","123456");
}catch(Exception e) {//TODO Auto-generated catch block
e.printStackTrace();
}
}/*** 关闭流*/
public voidcloseConnecting() {try{if (rs != null) {this.rs.close();
}this.pr.close();this.con.close();
}catch(Exception e) {//TODO Auto-generated catch block
e.printStackTrace();
}
}public static voidmain(String[] args) {
ManDao m= newManDao();
m.setCnnonection();
}
}
强调:把建立连接和关闭流放在一个类中分别定义二个方法是一种抽象的行为,方便需要用的时候直接调用其方法,而不写重复的代码。
package数据库连接;importjava.sql.Connection;importjava.sql.Date;importjava.sql.DriverManager;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.util.ArrayList;importjava.util.List;/*** 公民持久话实现接口
*@authorC
**/
public class ManDaoImpl extends ManDao implementsIManDao {public voidadd(ManBean man) {//加载驱动
try{this.setCnnonection();//执行sql语句,?表示占位符,需要向占位符填充数据
pr=con.prepareStatement("insert into t_man (manName,sex,brithday) values(?,?,?)");//将man对象中的name属性取出,填充第一个占位符
pr.setString(1,man.getName());
pr.setString(2, man.getSex());
pr.setDate(3, man.getBriyhday());//更新数据库 必须要写
pr.executeUpdate();
}catch(Exception e) {
e.printStackTrace();
}finally{this.closeConnecting();
}
}/*** 查找所有公民对象集合*/
public Listfindall() {
List list = new ArrayList();try{this.setCnnonection();
pr= con.prepareStatement("select *from t_man");//执行查询操作,将sql语句查询的数据,封装在结果集对象中
rs =pr.executeQuery();//将结果集的指针,不段指向下一条记录,如果该方法返回false ,表示指针到底结果集末尾。
while(rs.next()) {
ManBean man= newManBean();//将数据库中id列的值取出,填充实体对象的id属性。""是列名名称
man.setId(rs.getInt("id"));
man.setName(rs.getString("manName"));
man.setSex(rs.getString("sex"));
man.setBriyhday(rs.getDate("brithday"));//将封装好的记录实体对象加入集合
list.add(man);
}
}catch(Exception e) {//TODO Auto-generated catch block
e.printStackTrace();
}finally{this.closeConnecting();
}returnlist;
}
强调:1,添加、删除、修改完后必须要用executeUpdate()方法更新数据库。2,查询都要用结果集来传递数据库的数据。3,最后必须关闭连接,否则会导致数据的丢失。
java连本地mysql注意事项_java数据库连接及注意事项相关推荐
- Java基于本地MySQL连接设计图形化界面学生管理系统
思路 系统功能: 1. 添加学生信息:学号.姓名.性别.出生日期.学院部门等等(点击添加按钮后,输入要添加的学生信息) 2. 修改学生信息:根据学生学号修改(点击修改按钮后,输入存在的学号进行信息修改 ...
- java中常用的连接池_java数据库连接池
编写标准的数据源(规范) Java为数据库连接池提供了公共的接口:javax.sql.DataSource,各个厂商需要让自己的连接池实现这个接口.这样应用程序可以方便的切换不同厂商的连接池! 常见的 ...
- proxool mysql 8小时_java数据库连接池proxool介绍及mysql8小时断开连接问题的说明
Proxool是一种Java数据库连接池技术.是sourceforge下的一个开源项目,这个项目提供一个健壮.易用的连接池, 最为关键的是这个连接池提供监控的功能,方便易用,便于发现连接泄漏的情况. ...
- java窗口向mysql加信息_Java中如何实现向DBC方式向表中添加数据
原标题:Java中如何实现向DBC方式向表中添加数据 Java中如何实现向DBC方式向表中添加数据 Java程序JDBC方式向数据库的表添加记录的步骤: 1.新建工程: Java Project 2. ...
- java struts2 session mysql 内存不足_Java - 用户在线的数据库实现方法和内存实现方法...
一,数据库实现方法:(实现思路:基于Struts2.0的拦截器) 0,流程:struts.xml -> ApplicationContext.xml -> LoginInterceptor ...
- Java如何解决mysql读写延迟_java中延迟任务的处理方式
1.利用延迟队列 延时队列,第一他是个队列,所以具有对列功能第二就是延时,这就是延时对列,功能也就是将任务放在该延时对列中,只有到了延时时刻才能从该延时对列中获取任务否则获取不到-- 应用场景比较多, ...
- java项目上线mysql查询慢_Java Web应用程序在缓慢的MySQL查询中停滞不前
可能发生的事情是您的数据在更新过程中被"锁定以进行更新" – 这取决于数据的重新计算方式. 解决此问题的一种好方法是将新计算放入单独的数据区域,然后在完成所有操作后切换到使用新数据 ...
- java mysql重连_java mysql
关于 java mysql的搜索结果 问题 连接mysql错误,Druid-ConnectionPool-Create-1641320886 16:52:01.163 [Druid-Connectio ...
- java mysql数据库编程_java JDBC数据库(mysql)编程
什么是JDBC • JDBC(Java Data Base Connectivity,Java数据库连接) • 是一种用于执行SQL语句的Java API,为多种关系数据库提供统一访问 • 它由一组用 ...
最新文章
- c/c++基础 输入函数/流
- Service Manger的初始化分析
- OpenCV学习笔记大集锦
- mantis1.18升级1.2X方法
- A星算法(VC版源码)
- MSSQL手札四 MSSQL的函数
- matlab遗传算法拟合,基于遗传算法的数据拟合在MATLAB环境中的实现
- SpaceBase – 基于 Sass 的响应式 CSS 框架
- 《算法设计》求单峰数组
- html水印生成pdf,如何在jsPDF中添加PDF生成水印?
- Android自定义View之仿金山词霸加载效果
- ht城市介绍人口数量Html,城市人口热力图 城市热力图查询
- ZYNQ之FPGA 片内RAM读写测试实验
- 【Unity3D游戏开发学习笔记】(六)上帝之手—GameObject的操作
- 笔记 - 汽车之家的反爬手段
- TensorFlow Lite编译Android so库
- 在1-10中选择一个数,输出x+xx+xxx+xxx....x之和,如:数字为2,则2+22=24
- 为什么7805前要加达林顿管【转自阿莫论坛】
- C#中Abstract和Virtual使用详解
- Jim Beam推出搭载人工智能的酒瓶
热门文章
- C++ 数据抽象 封装 接口
- 链接(跳转)router-link 和 路由实例Router
- Windows启动管理器
- Javascript UserAgent 获取平台及浏览器信息
- LeetCode-Largest Rectangle in Histogram
- SQL 查询结果为 XML
- 抛体运动的小框架的源代码(rar)
- DataGrid中加入CheckBox,并实现单选
- Request header field content-type is not allowed by Access-Control-Allow-Headers(请求头设置问题)
- Django中使用CORS实现跨域请求