/*
                        statement与preparedStatement比较
每次执行sql语句,数据库都要执行sql语句的编译,最好用在仅执行一次查询并返回结果的情形,存在sql注入风险。
在执行可变参数的一条sql时,preparedstatement 比statement效率高,因为DBMS预编译一条sql当然会比多编译一条sql的效率高,
安全性更好,有效防止sql注入问题,由于采用擦车机制,预先编译的语句,就会放在cache中,下次执行相同的sql语句时,可以直接从
cache中取出来,大大提高了执行的效率。
*/
//法一statement使用
public static void main(String[] args) {
 
        //先导入驱动的jar包(可以网上下载mysql jdbc 驱动),右键属性-->java build path-->add external jars
        String url="jdbc:mysql://localhost:3306/student"; //连接数据库的url地址
        String username="root"; //数据库的用户名
        String password="123";  //数据库的密码
        Connection con=null;
        try
        {
            //1.加载mysql数据库驱动
            Class.forName("com.mysql.jdbc.Driver");
            //2.建立数据库连接,connection是java.sql包下的
            con=DriverManager.getConnection(url, username,password);
            if(con!=null)
            {
                System.out.println("数据库连接成功");
            }else {
                System.out.println("数据库连接不成功");
            }
            //3创建sql语句对象
            Statement statement=con.createStatement();
            //String sql="insert into login values('xiaoge','female','shandong')";
            //String sql="delete from login  where name='jack'";
             String sql="update  login set name='lucy' where city='nanjing'";
            //4执行语句
            int r=statement.executeUpdate(sql);
            if (r>0) {
                 //System.out.println("insert success..");
                //System.out.println("update success..");
                  System.out.println("delete success..."); 
            }
            else {
                //System.out.println(" fail..");
            }
        } 
        catch (Exception e) 
        {
            e.printStackTrace();
            //如果出错,在命令行打印异常信息在程序中出错的位置及原因。
        }
        finally
        {
            //5.释放资源
            if (con!=null) {
                try 
                {
                    con.close();
                    con=null;
                } 
                catch (SQLException e) 
                {
                    e.printStackTrace();
                }
            }
        }
    }
 
//法二preparedstatement
public static void main(String[] args) {
        try {
            Class.forName("com.mysql.jdbc.Driver");
            Connection connection=DriverManager.getConnection("jdbc:mysql://localhost:3306/student","root","123");
            String sqlString="insert into login values(?,?,?)";
            PreparedStatement preparedStatement=connection.prepareStatement(sqlString);   
            int rSet=preparedStatement.executeUpdate();
            //小标为1开始
//            preparedStatement.setString(1, "lifang");
//            preparedStatement.setString(2, "female");
//            preparedStatement.setString(3, "guangdong");
            preparedStatement.setString(1, "tom");
            preparedStatement.setString(2, "man");
            preparedStatement.setString(3,"beijing");
            int result=preparedStatement.executeUpdate();    
            if (result>0) {            
                System.out.println("insert success..");
            }
            else {
                System.out.println("insert fail..");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }