控制台应用程序。非SSM,SSH网页框架开发
Mevan工程中引入JDBC依赖
pom.xml
mysql
mysql-connector-java
5.1.45
就使用5.1.45这个版本,这个对应就是MySql 57的版本。【一定要引入,否则无法运行】
(一)连接数据库
定义3个字符串url,password,username,分别代表mysql数据库的ip地址信息,数据库名称,使用的编码格式,以及数据库用户名和密码的信息。【注意Url的格式】
public String URL="jdbc:mysql://localhost:3306/forestwar"+"?useUnicode=true&characterEncoding=utf-8&useSSL=false";
public String USER="root";
public String PW="660317";
不同于C#,JAVA在操作数据库中,本身就进行了对异常的处理,所以使用数据库是必须用Trt catch语句块包裹,不然就会有编译错误。
try {
//1:加载驱动程序
Class.forName("com.mysql.jdbc.Driver");
//2:获得数据库连接
Connection conn=DriverManager.getConnection(URL,USER,PW);
}catch (Exception e){
System.out.println("连接数据库时发生异常.异常信息为:"+e);
return null;
}
(二)执行数据库操作
与C#类似,也是有这几个操作,先创建控制台,然后书写sql语句。最后用控制台对象进行执行。
区别:在释放时 相对于C#,java的jdbc多了一步,C#不用释放控制台对象MySqlCommand。而JDBC要释放 Statement 对象。statementClose。
C#中 MySqlReader对象在执行后要时刻记住Close,否则下次数据库操作将会报错,而MySqlConnection不要随便关闭。一般是退出程序,或断开连接时再关闭
JAVA中 与之相似的ResultSet对象要在执行后记住关闭,且控制台PreparedStatement最好也关闭。【节约性能】。Connection一样,也不能随便关闭。一般是退出程序,或断开连接时再关闭
比较点:JAVA-C#
Connection-MySqlConnection
Statement-MySqlCommand
ResultSet-MySqlReader
executeUpdate【常用】-executeNoQuery【常用】
executeQuery【常用】-executeScalar【不常用】
execute【特殊情况下-最全能】-executeReader【常用-最全能】
【执行SQL语句】
与C#类似,也分为3种。executeQuery。execute。executeUpdate
execute【不常用】:增删改查都可执行,其返回类型为bool类型。true代表执行的是查询语句,false代表返回的是非查询语句。使用execute之后,可用statement对象.getResultSet()把结果【可多个】获取到在ResultSet对象中。通过rs.next()进行读取。类似于C#的reader.Read(),执行一次走一下
executeUpdate:只能用于非查询语句【改/删/查】。其返回为数字,即改变了的记录的条数。
executeQuery:用于查询语句,返回ResultSet对象,但只返回一条记录,若结果是多条,则只能得到第一条
由于SQL语句执行直接用字符串拼接的方式,十分危险,在C#中也提到过,并给出了解决方法,使用@字符代替,然后在执行前cmd.Paramters.AddWithValue()。为这些字符赋值。同样,在java中也有类似的处理
不使用Statement控制台,而是使用PreparedStatement。在写参数时,用?代替.为这些?赋值时,用的下标也是从1开始
(1)数据库删除查询操作
public void SelectedUserById(Connection conn,int userid)
{
String sqlstr="SELECT * FROM user WHERE id=?";
try {
PreparedStatement preparedStatement=conn.prepareStatement(sqlstr);
preparedStatement.setInt(1,userid);
ResultSet rs=preparedStatement.executeQuery();
if(rs.next())
{
System.out.println(rs.getString("username"));
}
rs.close();
}catch (Exception e){
}
}
(2)数据库增加记录操作
需要注意的是,?的下标是从1开始,在set的时候注意其数据类型
public void InsertTest(Connection conn)
{
try {
String sqlStr="INSERT INTO user(id,username,password) VALUES(?,?,?)";
PreparedStatement st=conn.prepareStatement(sqlStr);
st.setInt(1,1001);
st.setString(2,"Abukuma");
st.setString(3,"123abc456");
st.executeUpdate();
//rs.close();
st.close();
//conn.close();
}catch (Exception e)
{
}
}
(3)数据库更新记录操作
public void UpdatePasswordByUsername(Connection conn,String username,String newPassword)
{
try{
String updateSqlStr="UPDATE user SET password=? WHERE username=?";
PreparedStatement preparedStatement=conn.prepareStatement(updateSqlStr);
preparedStatement.setString(1,newPassword);
preparedStatement.setString(2,username);
preparedStatement.executeUpdate();
}catch (Exception e){
}
}
(4)数据库删除记录操作
public void DeleteById(Connection conn,int id)
{
try{
String deleteSqrStr="DELETE FROM user WHERE id=?";
PreparedStatement preparedStatement=conn.prepareStatement(deleteSqrStr);
preparedStatement.setInt(1,10);
preparedStatement.executeUpdate();
}catch (Exception e){
}
}
完整代码
import java.sql.*;
import java.util.List;
import java.util.Properties;
public class ConnHelper {
public String URL="jdbc:mysql://localhost:3306/forestwar"+"?useUnicode=true&characterEncoding=utf-8&useSSL=false";
public String USER="root";
public String PW="660317";
public Connection conn;
// public List clientMySqlConnList=new List();
public ConnHelper()
{
SelectAllTest( ConnectToMySql());
InsertTest(conn);
SelectedUserById(conn,7);
UpdatePasswordByUsername(conn,"Abukuma","123456");
DeleteById(conn,10);
}
public Connection ConnectToMySql()
{
try {
//1:加载驱动程序
Class.forName("com.mysql.jdbc.Driver");
//2:获得数据库连接
conn=DriverManager.getConnection(URL,USER,PW);
return conn;
}catch (Exception e){
System.out.println("连接数据库时发生异常.异常信息为:"+e);
return null;
}
}
public void SelectAllTest(Connection conn)
{
try {
Statement st=conn.createStatement();
String sqlStr="SELECT * FROM user";
ResultSet rs=st.executeQuery(sqlStr);
while(rs.next())
{
System.out.println("UserName:"+rs.getString("username"));
}
rs.close();
st.close();
//conn.close();
}catch (Exception e)
{
}
}
public void InsertTest(Connection conn)
{
try {
String sqlStr="INSERT INTO user(id,username,password) VALUES(?,?,?)";
PreparedStatement st=conn.prepareStatement(sqlStr);
st.setInt(1,1001);
st.setString(2,"Abukuma");
st.setString(3,"123abc456");
st.executeUpdate();
//rs.close();
st.close();
//conn.close();
}catch (Exception e)
{
}
}
public void UpdatePasswordByUsername(Connection conn,String username,String newPassword)
{
try{
String updateSqlStr="UPDATE user SET password=? WHERE username=?";
PreparedStatement preparedStatement=conn.prepareStatement(updateSqlStr);
preparedStatement.setString(1,newPassword);
preparedStatement.setString(2,username);
preparedStatement.executeUpdate();
}catch (Exception e){
}
}
public void SelectedUserById(Connection conn,int userid)
{
String sqlstr="SELECT * FROM user WHERE id=?";
try {
PreparedStatement preparedStatement=conn.prepareStatement(sqlstr);
preparedStatement.setInt(1,userid);
ResultSet rs=preparedStatement.executeQuery();
if(rs.next())
{
System.out.println(rs.getString("username"));
}
rs.close();
}catch (Exception e){
}
}
public void DeleteById(Connection conn,int id)
{
try{
String deleteSqrStr="DELETE FROM user WHERE id=?";
PreparedStatement preparedStatement=conn.prepareStatement(deleteSqrStr);
preparedStatement.setInt(1,10);
preparedStatement.executeUpdate();
}catch (Exception e){
}
}
}
注意事项
对于Connection这个类,即数据库连接。但这个Connection类可能存在两个包中
对于Mysql来说:
com.mysql.jdbc.Connection和java.sql.Connection
前者是导入的mysql包中的connection,后者是java自带的公共的。当然在进行数据库连接时,这两种方法都可以,但后更好,因为公用的。后者是java,java.sql.Connection 这是一个公共的接口包括对mysql的支持oracle,sqlserver 对很多数据库一个公共的API!
【!!!】欢迎关注我的个人线上课堂https://www.zuikakuedu.cn,内含JavaWeb与Unity游戏开发实战教程,完全免费!,Csdn博客涉及的课程资料也在该网站上