[转载] 1.1Java使用JDBC原生方式连接MySql数据库

参考链接: Java数据库连接JDBC驱动程序

前言:今天有朋友问我原生的java连接数据库,因为框架的使用,如果基础不牢固的人,是很容易遗忘原生的连接方式。今天正好趁此做一下回顾: 

   这里只考虑原生方式,框架就不在这里细说。   一、先大体搞清楚连接时,常用元素都是什么作用:   在MySQL的官方文档中,这样解释说到: 

 java.sql.Driver 它在MySQL Connector / J 中实现的类的名称 是 com.mysql.jdbc.Driver,也就是驱动程序。你可以把它理解为发动机,没了它,其他都没扯。  URL 有了发动机之后,你要开始利用它的力量,也就是为它指明前进的方向,而URL就是它的方向。 值得一提的是,目前连接URL的通用格式是这样的:  

    protocol//[hosts][/database][?properties]

    

    protocol:一种连接协议,约定的规则。

    hosts:主机名,通常后跟端口号,例如当前主机默认就是localhost:3306,当然也可以多主机连接,这里暂时不表。

    database:数据库嘛

 

其实应用测试时也就是这样的: 

    jdbc:mysql://localhost:3306/test

 

username 数据库连接的用户名 passowrd 连接密码Connection 与数据库建立连接关系,通常为 DriverManager.getConnection(url, username, password)。这里可以很明显的感觉出来,每个元素所产生的作用。Statement / PreparedStatement ,需要特别注意的是,我们提倡使用后者,也就是预编译语句。 PreparedStatement好处: 简化Statement中的操作 提高执行语句的性能 可读性和可维护性更好 在代码示例中,语法会详细体现。有了PreparedStatement语句之后,我们可以采用以下语句进行执行: executeQuery(String) 查询 executeUpdate(String SQL) 更新数据 execute(String SQL) 如果你不知道是查询还是修改,可以使用这个语句 

二、示例代码及注释 准备: 首先要导入mysql-connector-java 的jar包 其次,在数据库中准备如下格式的表:  之后写基本的连接代码 为了实现代码的重用,我对两个基本方法添加和查询进行封装: 这是接口:(User类可自行写入) 

public interface UserDao {

    public void add(User user);

    public User findByUsername(String username);

}

 

下面是实现类: 

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import cn.bang.user.domain.User;

 

public class JdbcUserDao implements UserDao {

 

    @Override

    public void add(User form) {

        String driverClassName = "com.mysql.jdbc.Driver";    //启动驱动

        String url = "jdbc:mysql://localhost:3306/test";    //设置连接路径

        String username = "root";    //数据库用户名

        String password = "123";    //数据库连接密码

        Connection con = null;        //连接

        PreparedStatement pstmt = null;    //使用预编译语句

        ResultSet rs = null;    //获取的结果集

        try {

            Class.forName(driverClassName); //执行驱动

            con = DriverManager.getConnection(url, username, password); //获取连接

            

            

            String sql = "INSERT INTO USER VALUES(?,?,?,?)"; //设置的预编译语句格式

            pstmt = con.prepareStatement(sql);

            pstmt.setString(1, form.getUsername());

            pstmt.setString(2, form.getPassword());

            pstmt.setInt(3, form.getAge());

            pstmt.setString(4, form.getGender());

            pstmt.executeUpdate();

        } catch (Exception e) {

            throw new RuntimeException(e);

        }finally {

            //关闭资源,倒关

            try {

            if(rs != null) rs.close();

            if(pstmt != null) pstmt.close();

            if(con != null) con.close();  //必须要关

            } catch (Exception e) {

            }

        }

        

 

    }

 

    @Override

    public User findByUsername(String username) {

        String driverClassName = "com.mysql.jdbc.Driver";

        String url = "jdbc:mysql://localhost:3306/test";

        String mysqlusername = "root";

        String password = "123";

        Connection con = null;

        PreparedStatement pstmt = null;

        ResultSet rs = null;

        try {

            

            Class.forName(driverClassName);

            con = DriverManager.getConnection(url, mysqlusername, password);

            

            

            String sql = "SELECT * FROM USER WHERE username=?";

            pstmt = con.prepareStatement(sql);

            pstmt.setNString(1, username);

 

            rs = pstmt.executeQuery();

            if(rs == null) {

                return null;

            }

            if(rs.next()) {

            User user = new User();

            user.setUsername(rs.getString("username"));

            user.setPassword(rs.getString("password"));

            user.setAge(rs.getInt("age"));

            user.setGender(rs.getString("gender"));

            

            

            return user;

        } else {

            return null;

        }

        } catch (Exception e) {

            throw new RuntimeException(e);

        }finally {

            //关闭资源,倒关

            try {

            if(rs != null) rs.close();

            if(pstmt != null) pstmt.close();

            if(con != null) con.close();  //必须要关

            } catch (Exception e) {

            }

        }

    }

}

 

开始进行测试   

这时候我们去数据库中查看:    

其中验证码我简单使用的一个类引入的。 

资料引导: MySQL官方文档

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/540421.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

maven安装及集成myeclipse

第一步:下载和安装 1、官网下载Maven:http://maven.apache.org/download.cgi 2、解压到一个文件夹2、设置环境变量:如:M2_HOME:D:\JAVA\apache-maven-3.0.5在path中添加;%M2_HOME%\bin;第二步:和MyEclipse集…

[转载] Java泛型详解:<T>和Class<T>的使用。泛型类,泛型方法的详细使用实例

参考链接&#xff1a; Java中的main()函数是强制性的吗 一、引入 1、泛型是什么 首先告诉大家ArrayList就是泛型。那ArrayList能完成哪些想不到的功能呢&#xff1f;先看看下面这段代码&#xff1a; [java] view plain copy ArrayList<String> strList new ArrayL…

数字和数字根的总和_使用8086微处理器查找8位数字的数字总和

数字和数字根的总和Problem statement: 问题陈述&#xff1a; Write an assembly language program in 8086 microprocessor to find sum of digit of an 8 bits number using 8 bits operation. 在8086微处理器中编写汇编语言程序&#xff0c;以使用8位运算找到8位数字的位数…

[转载] Java笔试题集锦

参考链接&#xff1a; 关于Java中文件名和类名的误解 Java笔试题集锦 1.MVC的各个部分都有那些技术来实现?如何实现? 答&#xff1a;MVC是Model&#xff0d;View&#xff0d;Controller的简写。"Model" 代表的是应用的业务逻辑&#xff08;通过JavaBean&#xff…

gcc -pthread_错误-在GCC Linux中使用C程序未定义对'pthread_create'的引用

gcc -pthread在Linux中修复对pthread_create的未定义引用 (Fixing undefined reference to pthread_create in Linux) This is a common error while compiling C program in GCC/G Linux. This error occurs when you are using pthread_create function to create threads in…

[转载] Java面试题全集(上)

参考链接&#xff1a; 如何运行不同目录中的Java类文件 2013年年底的时候&#xff0c;我看到了网上流传的一个叫做《Java面试题大全》的东西&#xff0c;认真的阅读了以后发现里面的很多题目是重复且没有价值的题目&#xff0c;还有不少的参考答案也是错误的&#xff0c;于是我…

python重载运算符乘法_Python | 使用乘法运算符创建一个字符串的多个副本

python重载运算符乘法Given a string and we have to create its multiple copies by using multiplication operator in Python? 给定一个字符串&#xff0c;我们必须通过在Python中使用乘法运算符来创建其多个副本&#xff1f; If you want to create multiple copies of …

一次前端笔试总结

1.有一个长度未知的数组a&#xff0c;如果它的长度为0就把数字1添加到数组里面&#xff0c;否则按照先进先出的队列规则让第一个元素出队。 分析&#xff1a;这道题主要是考核了数组的队列方法和栈方法。另外&#xff0c;原题还有字数限制的&#xff0c;只有在字数小于30并且结…

Java文件类boolean setLastModified(long set_new_time)方法,包含示例

文件类boolean setLastModified(long set_new_time) (File Class boolean setLastModified(long set_new_time)) This method is available in package java.io.File.setLastModified(long set_new_time). 软件包java.io.File.setLastModified(long set_new_time)中提供了此方法…

[转载] Linux里面的文件目录类指令

参考链接&#xff1a; 如何运行不同目录中的Java类文件 引用&#xff1a;尚硅谷韩老师的《尚硅谷-Linux-经典升级》 日常总结 pwd 指令 &#xff08;显示当前工作目录的绝对路径&#xff09; 基本语法 pwd (功能描述&#xff1a;显示当前工作目录的绝对路径) …

[转载] 微服务安全和治理

参考链接&#xff1a; 微服务介绍 在整体式架构中&#xff0c;由于运行应用程序的运行时环境相对隔离&#xff0c;所以治理和安全保护很简单。微服务架构具有典型的革新特征&#xff0c;给活动的治理和应用程序的安全威胁保护带来了更多挑战。 微服务架构中的安全性 微服务…

SSL

今天遇到一位网友要求老蒋将他当前已经在使用的WDCP面板环境&#xff0c;给某个站点添加SSL证书&#xff0c;实现HTTPS网址访问。在过去的几篇文章中&#xff0c;老蒋也有分享过不少在Linux VPS中对应的WEB环境安装SSL证书的经历&#xff0c;其实总体来看都大同小异&#xff0c…

[转载] Java中如何引用另一个类里的集合_Java工程师面试题整理

参考链接&#xff1a; 在Java中将预定义的类名用作类或变量名 花了一星期把学过的都整理一遍 尽量易懂&#xff0c;从基础到框架 最新版大厂面经汇总出炉&#xff0c;持续更新中 汇总完了上传网盘&#xff0c;设计到后端架构师的一切知识 如果没更新就代表我死了 一&#xff0…

应用宝认领应用

2019独角兽企业重金招聘Python工程师标准>>> 【Android】命令行jarsigner签字和解决找不到证书链错误 1、签名失败 $jarsigner -verbose -keystore /Volumes/Study/resourcesLib/Qunero-achivements/AndroidApp/QuLordy-signed-key -signedjar ./signed_XiaomiVerif…

[转载] Java | Java 面向对象知识小抄

参考链接&#xff1a; 在Java中将预定义的类名用作类或变量名 0. 前言 下面是本篇的内容提纲&#xff1a; 1. 类 Java 中类的声明形式如下所示&#xff0c;变量的声明和方法的定义意味着只能声明变量、初始化、方法定义等&#xff0c;而不能在方法外进行赋值等操作。 …

bash颜色、变量、数组、相关脚本示例

下面是bash的相关内容&#xff0c;包括bash的颜色代码、bash的四类文件、bash中变量处理方式、数组变量、shell的过程式编程语言以及部分简单脚本例子。 一、bash的颜色显示规则&#xff08;颜色代码&#xff09; bash的颜色代码&#xff0c;是ASCII编码对于颜色进行设置。颜色…

[转载] java程序员快速学c++

参考链接&#xff1a; 如何成为一名优秀的Java程序员 java程序员快速学c java程序员学cplus&#xff0c;其实大部分的语法是一样的&#xff0c;但是对java程序员来将&#xff0c;还是有写难点需要注意。看完这些还不能保证会写c程序&#xff0c;不过一般的程序可以看懂&…

[转载] Java标识符 数据类型 常量与变量

参考链接&#xff1a; Java标识符 Java标识符 Java对包、类、接口、方法、变量、常量&#xff08;不包括项目名&#xff09;等命名时使用的字符序列称为标识符。 命名规范&#xff1a; 1.标识符由数字、字母、_、$组成&#xff0c;且首字母不能是数字。 2.标识符对大小…

设计模式单例

单例模式 设计原则&#xff1a;无常用场景&#xff1a;应用中有对象需要是全局的且唯一使用概率&#xff1a;99.99999%复杂度&#xff1a;低变化点&#xff1a;无选择关键点&#xff1a;一个对象在应用中出现多个实例是否会引起逻辑上或者是程序上的错误逆鳞&#xff1a;在以为…

Squid服务日志分析

Squid服务日志分析 Apache 和 Squid 是两种著名的代理缓存软件&#xff0c;但Squid 较 Apache 而言是专门的代理缓存服务器软件&#xff0c;其代理缓存的功能强大&#xff0c;支持 HTTP/1.1 协议&#xff0c;其缓存对象也较多&#xff1b;并且 Squid 的缓存管理模块和访问控制模…