Java netty游戏服务器开发之通过jdbc访问Mysql数据库

控制台应用程序。非SSM,SSH网页框架开发

Mevan工程中引入JDBC依赖
pom.xml

<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.45</version>
</dependency>

就使用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<Connection> clientMySqlConnList=new List<Connection>();
    
        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博客涉及的课程资料也在该网站上

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

最咔酷学院

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值