精华内容
下载资源
问答
  • MySQL——Java 访问 MySQL 数据库

    万次阅读 多人点赞 2018-06-09 22:24:53
     Java 连接 MySQL 数据库  在 java.sql 包中存在 DriverManager 类、Connection 接口、Statement 接口和 ResultSet 接口。这些类和接口的含义和作用如下:  DriverManager 类:负责加载各种不同驱动程序...

    一.   下载与安装 MySQL   Connector/J

        MySOL  驱动  MySQL Connector/J  下载网站 https://dev.mysql.com/downloads/connector/j/5.1.html

        Source and Binaries(zip) 用于 Windows 操作系统,Source and Binaries(tar,gz)   用于 Linux 操作系统。

    二.  Java 连接 MySQL 数据库

        在  java.sql  包中存在  DriverManager  类、Connection  接口、Statement  接口和  ResultSet  接口。这些类和接口的含义和作用如下:

    •     DriverManager  类:负责加载各种不同驱动程序(Driver),并根据不同的请求,向调用者返回相应的数据库连接(Connection)
    •     Connection  接口:数据库连接,负责进行数据库间通讯,SQL 执行以及事务处理都在某个特定  Connection 环境中进行。主要用于管理建立好的数据库连接。
    •     Statement  接口:主要用以执行 SQL 语句。
    •     ResultSet  接口:主要用于存储数据库返回的记录。

    1.  指定  MySQL  驱动程序

        使用  java.lang.Class  类中的  forName()  方法指定  JDBC  驱动的类型,语句如下:

        Class.froName("com.mysql.jdbc.Driver");

    2.  使用  getConnection ()   方法连接数据库

        指定  MySQL 驱动程序以后,就可以使用  DriverManager  类和  Connection 接口来连接数据库了。这里使用DriverManager 类中的 getConnection ()方法。 getConnection()  方法返回一个 JDBC  Connection 对象,应该把它存储在程序中,以便以后引用。

        调用  getConnection ()  方法的语法如下:

        DriverManager.getConnection( URL, username, password);

        其中,URL 是程序要连接的数据库和要使用的  JDBC  驱动程序; usename 是程序连接时所用的数据库用户名; password 是该用户名的密码。

        【例】连接本地计算机  MySQL  数据库,MySQL  使用默认端口号  3306, 连接的数据库为  test_db,使用用户  root  连接,密码为  zth1530738736  。连接  MySQL  的语句如下:

    Connection  myConnection = DriverManager.getConnection(
    "jdbc:mysql://localhost:3306/test",
    "root",
    "zth1530738736"
    );

    也可为:

    String   url="jdbc:mysql://localhost:3306/test_db";    //获取协议、 IP  和端口等信息
    String   user="root";                                  //获取数据库用户名
    String   password="zth1530738736";                     //取数据库用户密码
    Connection   myConnection = DriverManager.getConnection ( url ,  user , password);
                                                           //创建 Connection 对象

    三.   Java 操作 MySQL  数据库

         Statement  接口主要用来执行 SQL 语句,执行后返回的结果由  ResultSet  接口管理。    

        1.  创建  Statement  对象

        Connection  对象调用  createStatement()  方法来创建  Statement  对象,该方法的语法格式如下:

        Statement   mystatement = connection.createStatement();

        其中,mystatement  是  Statement  对象;connection  是  Connection  对象;createStatement() 方法返回  Statement对象。Statement 对象创建成功后,可以调用其中的方法来执行 SQL 语句。

        2.  使用  SELECT  语句查询数据

        Statement  对象创建完成后,可以调用  executeQuery()  方法执行 SELECT  语句,查询结果会返回给  ResultSet  对象。

        调用  executeQuery ()  方法的语法格式如下:

        ResultSet   rs = statement.executeQuery ("SELECT 语句");

        通过该语句可以将查询结果存储到  rs  中。如果查询包含多条记录,可以使用循环语句来读取所有的记录,其代码如下:

        while ( rs.next ( ) ){

                String ss = rs.getString("字段名");

                System.out.print (ss );

            }

        其中“字段名”参数表示查询出来的记录的字段名称。使用  getString  函数可以将指定字段的值取出来。


        【例】从fruits表中查询水果的名称和价格。

    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    
    import com.mysql.jdbc.Connection;
    
    public class test {
    
    	public static void main(String[] args) throws ClassNotFoundException, SQLException {
    		Class.forName("com.mysql.jdbc.Driver");
    		String url = "jdbc:mysql://localhost:3306/test_db";
    		String user = "root";
    		String password = "zth1530738736";
    		java.sql.Connection myConnection = DriverManager.getConnection(url,user,password);
    		Statement mystatement = myConnection.createStatement();
    		ResultSet  rs = mystatement.executeQuery("  SELECT f_name,f_price FROM  test_db.fruits");
    		while(rs.next()) {
    			String fn = rs.getString("f_name");
    			String fp = rs.getString("f_price");
    			System.out.println(fn+"  "+fp);
    		}
    		if(mystatement != null) {
    			mystatement.close();
    			mystatement=null;
    		}
    		if(myConnection !=null) {
    			myConnection.close();
    			myConnection=null;
    		}
    	}
    
    }

        执行结果:

                          

    警告信息:

    Fri Jun 08 15:07:11 CST 2018 WARN: Establishing SSL connection without server's
     identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ 
    and 5.7.6+ requirements SSL connection must be established by default if explicit
     option isn't set. For compliance with existing applications not using SSL the 
    verifyServerCertificate property is set to 'false'. You need either to explicitly 
    disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for
     server certificate verification.

    谷歌翻译:

    警告:建议不建立服务器身份验证的SSL连接。 根据MySQL 5.5.45+,5.6.26+和5.7.6+
    的要求,如果未设置显式选项,则必须默认建立SSL连接。 为了符合不使用SSL的现有应
    用程序,verifyServerCertificate属性设置为'false'。 您需要通过设置useSSL = false显
    式禁用SSL,或者设置useSSL = true并为服务器证书验证提供信任库。

    解决办法:

    在URL加入useSSL=true或者false即可,如下所示:
    
    //原先报错程序
    Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test_db,"root", "123456");
    //更改后正确程序
    Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test_db?useSSL=false", "root", "123456");
    //也可以使用如下
    Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test_db?useUnicode=true&characterEncoding=utf-8&useSSL=false", "root", "123456");

        3.   插入、更新和删除数据

         如果需要插入、更新和删除数据,需要用  Statement 对象调用  executeUpdate()  方法来实现,该方法执行后,返回影响表的行数。

        使用  executeUpdate()  方法的语法格式如下:

        int   result  =  statement.executeUpdate(sql);

        其中,sql 参数可以是  INSERT  语句,也可以是  UPDATE 语句或者  DELECT  语句。该语句的结果为数字。

        

    ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

        【例】向  fruits  表中插入一条新记录。部分代码如下:

    Statement mystatement= myConnection.createStatement();           //创建Statement对象
    String sql=" INSERT  INTO  fruits   VALUES  ('h1',166 ,'biueberry',20.2)";  
    int  result = mystatement.executeUpdate(sql);                    //执行INSERT语句,返回插入的记录数
    System.out.println( result );                                    //输出插入的记录数

        控制台返回结果:

                            

    数据库查询结果:

    mysql> SELECt *  FROM  fruits  WHERE  f_id='h1';
    +------+------+-----------+---------+
    | f_id | s_id | f_name    | f_price |
    +------+------+-----------+---------+
    | h1   |  166 | biueberry |   20.20 |
    +------+------+-----------+---------+
    1 row in set (0.00 sec)


    +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


    【例】更新  fruits  表中  f_id  为‘h1’的记录,将该记录的  f_price  改为  33.5。部分代码如下:

    Statement mystatement= myConnection.createStatement();           //创建Statement对象
    String sql=" UPDATE  fruits  SET  f_price = 33.5  WHERE  f_id = 'h1'";  
    int  result = mystatement.executeUpdate(sql);                    //执行  UPDATE 语句,返回更新的记录数
    System.out.println( result );                                    //输出更新的记录数

    控制台返回结果:

                            

        数据库查询结果:

    mysql> SELECt *  FROM  fruits  WHERE  f_id='h1';
    +------+------+-----------+---------+
    | f_id | s_id | f_name    | f_price |
    +------+------+-----------+---------+
    | h1   |  166 | biueberry |   33.50 |
    +------+------+-----------+---------+
    1 row in set (0.00 sec)
    

    ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


        【例】删除  fruits  表中  f_id  为‘h1’的记录。部分代码如下:

    Statement mystatement=myConnection.createStatement();            //创建Statement对象
    String sql=" DELETE  FROM fruits  WHERE  f_id='h1'";             //获取DELECT语句
    int result = mystatement.executeUpdate(sql);                     //执行DELECT语句,返回删除的记录数
    System.out.print(result);                                        //输出删除的记录数
    		

        控制台返回结果:

                                

        数据库查询结果:

    mysql> SELECt *  FROM  fruits  WHERE  f_id='h1';
    Empty set (0.00 sec)
    

    +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


    4.    执行任意  SQL  语句

        如果无法确定  SQL  语句是查询还是更新时,可以使用  execute()  函数。 该函数的返回结果是  boolean  类型的值,返回值为 true  表示执行查询语句,返回  false 表示执行更新语句。

        调用  execute()  方法的代码:

        boolean  result  =  statement.execute(sql) ;

        如果要获取  SELECT  语句的查询结果,需要调用  getResultSet() 方法。要获取  INSERT  语句、UPDATE  语句或者DELETE语句影响表的行数,需要调用  getUpdateCount()  方法。

       ResultSet   result1 = statement. getResultSet();

        int   result2  =  mystatement.getUpdateCount();  

    ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

         【例】使用  execute()  函数执行 SQL 语句。部分代码如下:

    Statement mystatement=myConnection.createStatement();         //创建Statement对象
    		String sql=("SELECT f_name,f_price FROM fruits");               //定义sql变量,获取SELECT语句
    		boolean rst = mystatement.execute(sql);                        //执行SELECT语句
    		//如果执行SELECT语句,则execute()方法返回TRUE
    		if(rst==true) {
    		    ResultSet result = mystatement. getResultSet();       //将查询结果传递给result
    			while(result.next()){                          //判断是否还有记录
    		    String fn = result.getString("f_name");            //获取f_name字段的值
    		             String fp=result.getString("f_price");           //获取f_name字段的值
    		             System.out.println(fn+"  "+ fp);                //输出字段的值
    			}
    		}
    		//如果执行UPDATE语句、INSERT语句或者DELECT语句,则execute()方法返回FALSE
    		else {
    		     int ss=mystatement.getUpdateCount();                       //获取发生变化的记录数
    		     System.out.println(ss);                            //输出记录数
    		}

    控制台返回结果:

                                            


    5.  关闭创建的对象

        当所有的语句执行完毕后,需要关闭创建的对象,包括  Connection  对象、Statement  对象和  ResultSet   对象。关闭对象的顺序是先关闭  ResultSet  对象, 然后关闭  Statement  对象, 最后关闭  Connection  对象,这个和创建对象的顺序正好相反。关闭对象使用的是 close()  方法,将对象的值设为空。

        关闭对象的部分代码如下:

    if( result != null) {                             //判断  ResultSet  对象是否为空
    result.close();                            //调用  close()  方法关闭  ResultSet  对象
    result=null;
    }

    if(  statement != null) {                   //判断  Statement  对象是否为空
    statement.close();                    //调用  close()  方法关闭 Statement 对象
    statement=null;
    }
    if(  Connection !=null ) {                //判断  Connection  对象是否为空
    Connection.close();                //调用  close()  方法关闭  Connection  对象
    Connection=null;
    }


    四.   Java  备份和还原  MySQL  数据库

        1.  备份  MySQL 数据库

        Java  语言中的  Runtime  类的  exec()  方法可以运行外部的命令。调用  exec()  方法的代码如下:

         Runtime   rr  =  Runtime.getRuntime();
        rr.exec("外部命令语句");

        【例】在  Windows  操作系统下用  Java  备份  MySQL  数据库。部分代码如下:

    String str = "mysqldump  -u root  -pzth1530738736    -pot  booksDB  > G:/booksDB.sql ";
                                                        //将  mysqldump  命令的语句赋值给str
    Runtime rr = Runtime.getRuntime();                  //创建  Runtime  对象
    rr.exec("cmd /c"+str);                              //调用  exec()  函数

        上面的例子将  booksdb  数据库备份到   G:  目录下的  booksDB.sql   文件中。使用  -pot  选项可以提高备份的速度;   cmd  表示要使用  cmd  命令来打开  DOS  窗口;/C  表示执行完毕后关闭  DOS  窗口。


    2.  还原  MySQL  数据库

        用  Java  还原  MySQL  数据库时,使用  exec ()  方法来执行  mysq|  命令。

       【例】在  windows  操作系统下    Java  还原  MySQL  数据库。部分代码如下:

    String   str  =  "mysql  -u   root    -pzth1530738736   booksDB   <  G:\\booksDB.sql";
                                                            //将  mysql  命令的语句赋值给str
    Runtime   rr  =  Runtime.getRuntime();                  //创建R  untime 对象
    rr.exec("cmd /c" + str);                                //调用exec()函数
        将  G:\目录下的  booksDB.sql   文件还原到数据库 booksDB  中。


    【注】参考于清华大学出版社《MySQL数据库应用案例课堂》2016年1月第1版

    展开全文
  • 如题,现在有个项目,用的S2SH框架+DWZ做的,但是有个需求是要实现异地多服务器访问数据,比方说登录访问的是一个服务器地址,但是登录进去后业务存储在另一个服务器上读取,请问可以用什么技术实现? 再打个比方,...
  • esp8266上传温湿度数据到本地java服务器并将数据存到数据库,可以将java程序部署到服务器上,只需要把jdbc里面的配置和wifi模块的配置改一下即可
  • Java web 服务器连接MySQL数据库代码

    千次阅读 多人点赞 2020-03-16 17:23:42
    本文内容分为两部分,分别是java web连接MySQL数据库java web对数据库进行基本数据操作。附加代码。

    前言

    经过前面的环境部署,今天我们终于可以来连接数据库了。参考我之前的文章。这篇文章把前面两章连接起来,做一个小总结,并做一个可以保存用户登录数据的网站,代码主要解释对数据库的部分。

    先前的开发环境安装:
    centos7从零搭建java web服务器
    MySQL从零安装配置

    一,建立工程

    1,在eclipse新建动态web工程,具体过程已经有很多人写过了,我就简单说明一下。

    打开eclipse->file->new->dynamic web subject

    tomcat版本选你安装的版本,方便以后调试,web module 版本我用2.5,跟3.0差不多。3.0少了web.xml的配置文件等。一路next下去就行了
    在这里插入图片描述

    二,导入jar包

    连接MySQL需要导入MySQL相关的jar包,另外我还加入log包,对于开发非常有帮助,可以在控制台打印数据,方便debug。jar包就放下图示目录,另外还需要在项目右击->properties->java built path->libraries里添加我们刚刚添加的jar包,这样jar包才算真正导入;

    jar包下载连接:
    链接: https://pan.baidu.com/s/143RT1qygtKIimCRmLdpAbw 提取码: vd22

    在这里插入图片描述
    点击add jars 选择刚刚加入的jar包添加进去就行了
    在这里插入图片描述
    *

    三,编写DataBase类实现连接数据库与操作数据库

    以下代码需要自己先了解SQL语句,MySQL基本命令。代码实现了连接数据库,对数据库的某表格进行添加,读取,更新操作。对应的应用是添加用户,读取用户登录信息,更新密码。

    注意数据保存到MySQL数据库出现中文乱码的问题,要在前端,后台,连接串,MySQL都设置相同的编码方式,比如我选择的是utf8
    在MySQL命令中输入show variables like “%char%”;查看当前的编码,如图,都是utf8就没问题,需要修改的话可以查看修改办法
    在这里插入图片描述

    DataBase.java代码,主要实现对数据库连接和增改查操作

    package myapp;
    
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    
    import com.mysql.jdbc.Connection;
    
    public class DataBase {
    	private static String driver="com.mysql.jdbc.Driver";//MySQL驱动
    	private static String user = "prx";// MySQL的用户名和密码
        private static String password = "5812870-Prx";
        private static String ip_adress = "192.168.x.x";//主机ip地址
        /*
         * 说明:与数据库建立连接
         * 参数:数据库名称
         */
        private static Connection getConn(String DatabaseName) throws SQLException
        {
        	//设置MySQL的连接串编码为UTF-8,避免中文乱码问题
        	String url="jdbc:mysql://localhost:3306/"+DatabaseName+"?characterEncoding=UTF-8";
        	System.out.println("the url is :"+url);
        	Connection connection=null;
        	try {
    			Class.forName(driver);//加载MySQL驱动程序
    			//连接数据库 驱动+ip地址+端口号+用户名+密码,端口号默认是3306
    			connection=(Connection) DriverManager.getConnection("jdbc:mysql://" + ip_adress + ":3306/" + DatabaseName,
                        user, password);
    			connection.setEncoding("UTF-8");
    			
    		} catch (ClassNotFoundException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
        	//返回connection对象
    		return connection;
    	}
        /*
         * 添加新用户
         * String name,String sex,string age,String id,String password,String emailadress
         */
        public static void adduser(String name,String sex,String age,String id,String password,String emailadress) throws SQLException
        {
        	String Database="myapp";
        	String sql="INSERT INTO myapp_user (name,sex,age,id,password,emailadress) VALUES (?,?,?,?,?,?)";
        	Connection connection=getConn(Database);
        	if (connection!=null){
                try {
                    PreparedStatement ps=connection.prepareStatement(sql);
                    if (ps!=null){
                    	
                        ps.setString(1,name);
                        ps.setString(2,sex);
                        ps.setString(3,age);
                        ps.setString(4,id);
                        ps.setString(5,password);
                        ps.setString(6,emailadress);
                        //执行语句,注意!!!如果你的SQL 语句是诸如update,insert的更新语句,应该用statement的execute()方法
                        // select用的是statement的executeQuery()
                        ps.execute();
                        
                        connection.close();
                        ps.close();
                    }
                } catch (SQLException e) {
                    e.printStackTrace();
                    
                }
            }
        }
        
        public static void updatepassword(String id,String newpassword) throws SQLException
        {
        	String Database="myapp";
        	String sql="UPDATE myapp_user SET password=? where id=?";
        	Connection connection=getConn(Database);
        	if (connection!=null){
                try {
                    PreparedStatement ps=connection.prepareStatement(sql);
                    if (ps!=null){
                        ps.setString(1,newpassword);
                        ps.setString(2,id);
                      
                        //执行语句,注意!!!如果你的SQL 语句是诸如update,insert的更新语句,应该用statement的execute()方法
                        // select用的是statement的executeQuery()
                        ps.execute();
                        
                        connection.close();
                        ps.close();
                    	}
                } catch (SQLException e) {
                    e.printStackTrace();
                    
                }
        
        	}
        }
        /*
         * 读取指定的值
         * 输入id 键
         */
        public static String sele_userinfo(String id,String key) throws SQLException {
        	String value = null;
        	String Database="myapp";
        	String sql="SELECT "+key+" FROM myapp_user WHERE id=?";
        	
        	Connection connection=getConn(Database);
        	if (connection!=null){
                try {
                    PreparedStatement ps=connection.prepareStatement(sql);
                    if (ps!=null){
                        ps.setString(1,id);
                        ResultSet rs=ps.executeQuery();
                        if(rs!=null) {
                        	int count =rs.getMetaData().getColumnCount();
                            while   (rs.next()){
                                for (int i=1 ;i<=count;i++){
                                    String field=rs.getMetaData().getColumnName(i);     
                                        value=rs.getString(field);
                                        System.out.println("the database value is:"+value); 
                                	}
                            }
                        
                    	}
                    }
                } catch (SQLException e) {
                    e.printStackTrace();
                    
                }
        
        	}
        	return value;
        }
        /*
         * 检查id'是否存在
         * 传入id
         */
        public static int hasId(String id) throws SQLException {
        	String Database="myapp";
        	String value;
        	String sql="select id from myapp_user";
        	 System.out.println("the input id is :"+id);
        	Connection connection=getConn(Database);
        	if (connection!=null){
                try {
                    PreparedStatement ps=connection.prepareStatement(sql);
                    if (ps!=null){
                       
                        ResultSet rs=ps.executeQuery();
                        if(rs!=null) {
                        	int count =rs.getMetaData().getColumnCount();
                            while   (rs.next()){
                                for (int i=1 ;i<=count;i++){
                                    String field=rs.getMetaData().getColumnName(i);     
                                    value=rs.getString(field);
                                    
                                    System.out.println("the database id is:"+value); 
                            
                                    if(value.equals(id))
                                    {                            
                                    	return 1;
                                    }
                                    	 
                                	}
                            }
                        
                    	}
                    }
                } catch (SQLException e) {
                    e.printStackTrace();               
                }   
        	}
        	return 0;
        }
    }
    

    四,效果图

    登录页面
    登录页面
    注册
    在这里插入图片描述
    在这里插入图片描述
    在终端查看数据库,数据保存成功
    在这里插入图片描述
    登录成功!
    在这里插入图片描述
    整个工程文件下载:
    链接: https://pan.baidu.com/s/1jq4LoetVdoksjjjGQeb4MA 提取码: 33xw 复制这段内容后打开百度网盘手机App,操作更方便哦
    2020.3.16

    参考文章

    Eclipse创建java Web项目工程
    在这里插入图片描述

    展开全文
  • Java 访问Hbase数据库

    千次阅读 2017-08-25 10:13:11
    所以java访问Hbase其实就是访问hdfs,所以环境搭建跟hadoop开发环境使用没什么不同。 实战部分 1.导入需要的jar包,此处在java项目引入Hbase解压后lib目录下所有jar包即可。里面提供了访问Hbase的api接口,也有与...

    须知

    Hbase数据最终是在hdfs上的,具体来说应该是在hdfs上一个叫做/hbase的目录下。具体结构如下:


    所以java访问Hbase其实就是访问hdfs,所以环境搭建跟hadoop开发环境使用没什么不同。

    实战部分

    1.导入需要的jar包,此处在java项目引入Hbase解压后lib目录下所有jar包即可。里面提供了访问Hbase的api接口,也有与hadoop集成的客户端jar包。

    2.将hbase-site.xml拷贝到classpath根目录下,这样,hbase在创建configuration对象会自动加载,hbase源码此部分:

     public static Configuration addHbaseResources(Configuration conf)
        {
            conf.addResource("hbase-default.xml");
            conf.addResource("hbase-site.xml");
            checkDefaultsVersion(conf);
            checkForClusterFreeMemoryLimit(conf);
            return conf;
        }
    
    
    hbase-site.xml,注意里面主机名要跟core-site.xml一致,另外还需要在hosts文件加一行主机名和hbase服务器ip地址的映射。(windows下面的hosts文件在:C:\Windows\System32\drivers\etc)

    具体文件hbase-site.xml参照内容如下:

    <configuration>
    <property>
      <name>hbase.rootdir</name>
        <value>hdfs://chidianwei-VirtualBox:9000/hbase</value>
        </property>
        <property>
          <name>hbase.cluster.distributed</name>
            <value>true</value>
            </property>
            <property>
              <name>hbase.zookeeper.quorum</name>
                <value>chidianwei-VirtualBox</value>
                </property>
                <property>
                  <name>dfs.replication</name>
                    <value>1</value>
                    </property>
    </configuration>

    3.下面我们就可以写一个初始化表测试类,创建了两张表,word和stat。(其中的HbaseUtil类代码见最后一步)代码如下:

    public class InitData {
        
        public static void main(String[] args) throws IOException {
            //创建一个word表,只有一个列族content
            HBaseUtil.createTable("word","content");
            
            //获取word表
            HTable htable = HBaseUtil.getHTable("word");
            htable.setAutoFlush(false);
            
            //创建测试数据
           List<Put> puts = new ArrayList<Put>();
           
           Put put1 = HBaseUtil.getPut("1","content",null,"The Apache Hadoop software library is a framework");
           Put put2 = HBaseUtil.getPut("2","content",null,"The common utilities that support the other Hadoop modules");
           Put put3 = HBaseUtil.getPut("3","content",null,"Hadoop by reading the documentation");
           Put put4 = HBaseUtil.getPut("4","content",null,"Hadoop from the release page");
           Put put5 = HBaseUtil.getPut("5","content",null,"Hadoop on the mailing list");
           
           puts.add(put1);
           puts.add(put2);
           puts.add(put3);
           puts.add(put4);
           puts.add(put5);
           
           //提交测试数据
          htable.put(puts);
          htable.flushCommits();
          htable.close();
            //创建stat表,只有一个列祖result
          HBaseUtil.createTable("stat","result");
        }
    }
     

    4.hbase工具类,里面涉及到java对hbase数据库创建表,删除表,常见的crud操作等等。具体参照代码:

    package com.oracle.hbase.weifenbushi;
    
    import java.io.IOException;
    import java.util.Arrays;
    
    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.hbase.HBaseConfiguration;
    import org.apache.hadoop.hbase.HColumnDescriptor;
    import org.apache.hadoop.hbase.HTableDescriptor;
    import org.apache.hadoop.hbase.MasterNotRunningException;
    import org.apache.hadoop.hbase.ZooKeeperConnectionException;
    import org.apache.hadoop.hbase.client.Get;
    import org.apache.hadoop.hbase.client.HBaseAdmin;
    import org.apache.hadoop.hbase.client.HTable;
    import org.apache.hadoop.hbase.client.Put;
    import org.apache.hadoop.hbase.client.Result;
    import org.apache.hadoop.hbase.client.ResultScanner;
    import org.apache.hadoop.hbase.client.Scan;
    import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp;
    import org.apache.hadoop.hbase.filter.Filter;
    import org.apache.hadoop.hbase.filter.FilterList;
    import org.apache.hadoop.hbase.filter.FilterList.Operator;
    import org.apache.hadoop.hbase.filter.SingleColumnValueFilter;
    import org.apache.hadoop.hbase.util.Bytes;
    
    public class HBaseUtil {
        
        /**
         * 初始化HBase的配置文件
         * @return
         */
        public static Configuration getConfiguration(){
            Configuration conf = HBaseConfiguration.create();
            //和hbase-site.xml中配置的一致
            conf.set("hbase.zooker.quorum", "192.168.10.127");
    //        conf.set("hbase.zooker.quorum", "oraclehadoop1");
            return conf;
        }
        
        /**
         * 实例化HBaseAdmin,HBaseAdmin用于对表的元素据进行操作
         * @return
         * @throws MasterNotRunningException
         * @throws ZooKeeperConnectionException
         */
        public static HBaseAdmin getHBaseAdmin() throws MasterNotRunningException, ZooKeeperConnectionException{
        	HBaseAdmin a=null;
        	try {
    			a= new HBaseAdmin(getConfiguration());
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
        	return a;
        }
        
        /**
         * 创建表
         * @param tableName            表名
         * @param columnFamilies    列族
         * @throws IOException
         */
        public static void createTable(String tableName,String...columnFamilies) throws IOException {
            HTableDescriptor htd = new HTableDescriptor(tableName.getBytes());//
            for(String fc : columnFamilies) {
                htd.addFamily(new HColumnDescriptor(fc));
            }
            getHBaseAdmin().createTable(htd);
        }
        
        /**
         * 获取HTableDescriptor
         * @param tableName
         * @return
         * @throws IOException
         */
        public static HTableDescriptor getHTableDescriptor(byte[] tableName) throws IOException{
            return getHBaseAdmin().getTableDescriptor(tableName); 
        }
        
        /**
         * 获取表
         * @param tableName 表名
         * @return
         * @throws IOException
         */
        public static HTable getHTable(String tableName) throws IOException{
            return new HTable(getConfiguration(),tableName);
        }
        
        /**
         * 获取Put,Put是插入一行数据的封装格式
         * @param tableName
         * @param row
         * @param columnFamily
         * @param qualifier
         * @param value
         * @return
         * @throws IOException
         */
        public static Put getPut(String row,String columnFamily,String qualifier,String value) throws IOException{
            Put put = new Put(row.getBytes());
            if(qualifier==null||"".equals(qualifier)) {
                put.add(columnFamily.getBytes(), null, value.getBytes());
            }else {
                put.add(columnFamily.getBytes(), qualifier.getBytes(), value.getBytes());
            }
            return put;
        }
        
        /**
         * 查询某一行的数据
         * @param tableName    表名
         * @param row        行键
         * @return
         * @throws IOException
         */
        public static Result getResult(String tableName,String row) throws IOException {
            Get get = new Get(row.getBytes());
            HTable htable  = getHTable(tableName);
            Result result = htable.get(get);
            htable.close();
            return result;
            
        }
        
        /**
         * 条件查询
         * @param tableName        表名
         * @param columnFamily    列族
         * @param queryCondition    查询条件值
         * @param begin                查询的起始行
         * @param end                查询的终止行
         * @return
         * @throws IOException
         */
        public static ResultScanner getResultScanner(String tableName,String columnFamily,String queryCondition,String begin,String end) throws IOException{
            
            Scan scan = new Scan();
            //设置起始行
            scan.setStartRow(Bytes.toBytes(begin));
            //设置终止行
            scan.setStopRow(Bytes.toBytes(end));
            
            //指定要查询的列族
            scan.addColumn(Bytes.toBytes(columnFamily),null);
            //查询列族中值等于queryCondition的记录
            Filter filter1 = new SingleColumnValueFilter(Bytes.toBytes(columnFamily),null,CompareOp.EQUAL,Bytes.toBytes(queryCondition));
            //Filter filter2 = new SingleColumnValueFilter(Bytes.toBytes(columnFamily),null,CompareOp.EQUAL,Bytes.toBytes("chuliuxiang"));
            
            FilterList filterList = new FilterList(Operator.MUST_PASS_ONE,Arrays.asList(filter1));
            
            scan.setFilter(filterList);
            HTable htable  = getHTable(tableName);
            
            ResultScanner rs = htable.getScanner(scan);
            htable.close();
            return rs;
        }
        
        public static void main(String[] args) {
    		try {
    			Result result = getResult("word", "1");
    			System.out.println(new String(result.list().get(0).getValue()));
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
        
    }
    

    总结:

    以上就是java对hbase伪分布式的访问,对集群的访问也是一样,api是不会变的,变化的是配置文件,对应的quorum是zookeeper集群,配置变为: conf.set("hbase.zookeeper.quorum", "weekend05:2181,weekend06:2181,weekend07:2181");

    ok,希望对大家会有帮助。


    展开全文
  • Java 访问PI 数据库:(2)JDBC访问PI

    千次阅读 热门讨论 2017-09-26 15:08:21
    用常用JDBC访问数据库的方式即可查询PI 数据库 package com .bkc .test ; import java .sql .Connection ; import java .sql .DatabaseMetaData ; import java .sql .DriverManager ; import java .sql ....

    技术说明

    1. 采用 Maven 集成

      • 从 PI JDBC Driver 安装后的目录下取出 PIHOME\JDBC\PIJDBCDriver.jar。将其放在项目的lib 下,引入项目中
        <!-- 引入本地jar包 -->
            <dependency>
                <groupId>com.osisoft</groupId>
                <artifactId>PIJDBCDriver</artifactId>
                <version>1.5.17051.1</version>
                <scope>system</scope>
                <systemPath>${project.basedir}/src/main/webapp/WEB-INF/lib/PIJDBCDriver.jar</systemPath>
            </dependency>
    2. 使用 C3P0 数据源配置信息

      • conf.properties
    pi.jdbc.type=PI
    pi.jdbc.driver=com.osisoft.jdbc.Driver
    pi.jdbc.url=jdbc:pioledb://localhost/Data Source=PIAddress; Integrated Security=SSPI
    #pool settings
    jdbc.pool.init=1
    jdbc.pool.minIdle=20
    jdbc.pool.maxActive=50
    • spring-context.xml 中的配置
    <!-- C3P0连接池配置 -->
        <bean id="dataSource_PI" class="com.mchange.v2.c3p0.ComboPooledDataSource">
            <property name="driverClass" value="${pi.jdbc.driver}" />
            <property name="jdbcUrl" value="${pi.jdbc.url}" />
            <property name="user" value="" />
            <property name="initialPoolSize" value="${jdbc.pool.init}" />
            <property name="minPoolSize" value="${jdbc.pool.minIdle}" />
            <property name="maxPoolSize" value="${jdbc.pool.maxActive}" />
            <property name="maxIdleTime" value="60000" />
        </bean>
    1. 用常用JDBC访问数据库的方式即可查询PI 数据库
    package com.bkc.test;
    
    import java.sql.Connection;
    import java.sql.DatabaseMetaData;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.Properties;
    
    public class GetBAMetaData
    {
    
        public static void main(String[] args)
        {
            // arguments: java GetBAMetaData dasName [trustedConnection protocolOrder logLevel]
            // example: java GetBAMetaData myDas yes nettcp:5462 2
            String dasName = "localhost";
            String dataSourceName = "192.168.1.32";
            String isTrustedConnection = "Yes";
            String protocolOrder = "Https/Soap:5461,NetTcp:5462";
            String logLevel = "0";
    
            System.out.println("\nArguments:");
            System.out.println("\tData Access Server Name: " + dasName);
            System.out.println("\tUse trusted connection?: " + isTrustedConnection);
            System.out.println("\tProtocol order: " + protocolOrder);
            System.out.println("\tLog level: " + logLevel);
    
    
            Connection connection = null;
            String url = "";
            String driverClassName = "com.osisoft.jdbc.Driver";
            ResultSet resultSet = null;
            Properties properties = new Properties();
    
            //url = "jdbc:piintegrator://" + dasName;
            //url = "jdbc:pioledb://" + dasName + "/Data Source=" + dataSourceName + "; Integrated Security=SSPI";
            url = "jdbc:pioledb://" + dasName + "/Data Source=" + dataSourceName + "; Integrated Security=SSPI";
            System.out.println(url);
            properties.put("TrustedConnection", isTrustedConnection);
            properties.put("ProtocolOrder", protocolOrder);
    
            properties.put("LogConsole", "True");
            properties.put("LogLevel", logLevel);
    
            try
            {
                Class.forName(driverClassName).newInstance();
                connection = DriverManager.getConnection(url, properties);  
    
                DatabaseMetaData metaData = connection.getMetaData();
                System.out.println(metaData.getDriverName() + " " + metaData.getDriverVersion()); 
                System.out.println(metaData.getDatabaseProductName());
                System.out.println(metaData.getDatabaseProductVersion() + "\n");
    
                // get all tables and views
                String tTypes[] = new String[] {"TABLE", "VIEW"};
                resultSet = metaData.getTables(null, null, "%", tTypes);
    
                if(!resultSet.first())
                    throw new Exception ("No rows in the result set.");
    
                // we are just interested in those 4 columns
                System.out.print("Catalog || ");
                System.out.print("Schema || ");
                System.out.print("Table || ");
                System.out.println("Table Type\n");
    
                // read the data
                while (!resultSet.isAfterLast()) {
                    System.out.print(resultSet.getString("TABLE_CAT") + " || ");
                    System.out.print(resultSet.getString("TABLE_SCHEM") + " || ");
                    System.out.print(resultSet.getString("TABLE_NAME") + " || ");
                    System.out.println(resultSet.getString("TABLE_TYPE"));
                    resultSet.next();
                }
    
            }
            catch (Exception ex)
            {
                System.err.println(ex);
            }
            finally
            {
                try {
                    if(resultSet != null) resultSet.close();
                    if(connection != null) connection.close();
                } catch (SQLException ex) {
                    System.err.println(ex);
                }
            }   
        }
    }
    展开全文
  • Java连接远程服务器上的oracle数据库

    千次阅读 2018-03-23 15:25:35
    这里我自己新建了一个数据库实例“testorcl”,需要他被外部客户端访问,所以给他加一个监听地址。2、这样就可以通过代码连接了Oracle数据库先创建一个表和添加一些数据1.先在Oracle数据库中创建一个student表:1 ...
  • 把传统产业的 C/S 和互联网的 B/S,以及基于微信公众号/小程序的 W/S 结合起来实现同源服务器的多客户端的云服务产品设计一直是我这几年研究的方向。我们姑且把这种设计模式称之为 CBS(客户端-浏览器-服务器)开发...
  • 前提条件:已经买了云服务器,并且已经搭建好了云服务器。 (如果还没有搭建好服务器,可以看一下我的上一篇博文) 工具包 mysql-connector-java-5.1.34.jar 这个驱动包在网上随便一找就找得到,或者可以用下面...
  • Java连接mysql数据库并执行sql语句

    千次阅读 2020-06-22 16:25:46
    弄这个主要是为了方便测试单个sql的性能,尝试用java连接数据库并查询,将结果的JDBC ResultSet结果集转成List并输出。 import java.sql.*; import java.sql.DriverManager; import com.mysql.jdbc.Connection; ...
  • JAVA操作数据库→本地→FTP服务器) 今天这个功能则是(JAVA操作数据库→FTP服务器); 一上来直接把以前的代码拉出来用了 import org.apache.commons.net.ftp.FTPClient; 诶?怎么报错呀。。。没有这个包?...
  • java连接达梦数据库的简单代码

    千次阅读 2021-02-12 11:32:17
    国产达梦数据库的结合Enterprise Library的应用开发 在上篇介绍了如何在Enterprise Library的数据访问层上支持这种神秘的国产数 ... 达梦数据库DM7小结 除了很多主流的数据库,我们很熟悉之外,越来越多的国产数据库...
  • java如何连接数据库(新手上路)

    万次阅读 多人点赞 2020-12-15 14:56:38
      java如何连接数据库(这里以mysql为例)?java数据库本不相关,那么想要两个不相关的的事物发生关系,那么就需要中间的媒介,中间桥梁。那么java数据库中间的桥梁的就是JDBC。下面就对JDBC做一个简单的介绍...
  • 1.首先点击电脑的开始,找到SQL Server 配置管理器,将SQL Server网络配置中的SQLEXPRESS 的协议...2.新建一个数据库mydata,在数据库中建立一个表,并插入数据 --学生表 create table student( sno char(8) PRIM...
  • JAVA访问数据库之连接数据库

    千次阅读 2016-01-06 09:57:35
    开发一个访问数据库的应用程序,首先要加载数据库的驱动程序,只需要在第一次访问数据库时加载一次,然后每次运行时创建一个Connection实例,紧接着执行操作数据库的SQL语句,并处理返回的结果集,最后在完成完成...
  • 我们可以使用speedamp来搭一个服务器环境,可以在http://download.csdn.net/detail/baidu_nod/7630265下载 解压后无需安装直接可以使用,点击SpeedAMP.exe,...java可以通过jdbc来访问数据库,比较重要的是下载一个m
  • Java程序连接数据库

    千次阅读 2019-06-09 10:15:09
    客户机与服务器采用网络连接,客户机端应用程序按通信协议与服务器端的数据库程序通信;数据库服务程序通过SQL命令与数据库管理系统通信。 Java程序与数据库连接方法有两种。一种是使用JDBC-ODBC桥接器与数据库连接...
  • MongoClient 提供连接到MongoDB服务器访问数据的功能 DB 提供了身份验证,用户账户管理以及访问和操作集合的功能 DBCollection 提供了访问和操作集合中文档的功能 DBCursor 表示MongoDB服务器中的一组文档...
  • Java连接MySQL数据库并操作数据库

    千次阅读 2018-04-14 13:41:19
    一、为了使得java应用能够连接MySQL数据库,需要进行以下几步的配置操作: (1).Driverclass: MySQL数据库的驱动类是com.mysql.jdbc.Driver (2).ConnectionURL: MySQL数据库连接的URL是 jdbc:mysql://localhost:...
  • 通过JAVA连接PI实时数据库

    千次阅读 2018-06-04 14:27:10
    最近因为公司项目需求,需要通过JDBC连接PI实时数据库。在网上发现盼兮这位大牛提供了非常详细的解决方案,转载到此,以备以后需要——————————————————————————————————环境配置:...
  • 服务器的命令行界面登录MySQL是可以查询出数据的,但就是用浏览器访问网页查询结果为空 Java web项目 jsp + servlet + java bean + mysql 5.6 服务器操作系统Centos 6.5 64位 Tomcat 8.0 JDK 1.8 数据库...
  • 关于Tomcat服务器报错500问题 如下图: 根据提示,我找到了问题在这里: 检查了多次,发现执行sql语句都没问题,最后我发现,需要在tomcat的文件夹里添加mysql数据库的依赖。 如下图:找到自己的tomcat文件夹: ...
  • Android Studio连接云服务器数据库

    千次阅读 多人点赞 2020-04-16 22:35:21
    Android Studio连接云服务器数据库写在开始1.Navicat连接云服务器数据库2.MyEclipse开发服务端servlet的相关步骤Android Studio端代码编写 写在开始 这篇教程用于记录一下我的一次Android Studio连接数据库的过程。...
  • 最受欢迎Java数据库访问框架(DAO层)

    千次阅读 2020-06-16 00:00:00
    正文 本文将带您浏览和比较最受欢迎Java数据库访问框架(DAO层)。 假设您正在开发一个Java程序,有许多办法可以让您的应用连上数据库。下面会列举各数据库访问框架的适用场景,相信能够帮您选到适合项目的开发...
  • 之前的练习中,都是用自己的电脑作为服务器,非同一局域网之下的其他人员无法访问本地项目,以为发布项目到Linux服务器上会很难,其实接触了之后才发现很简单,我们只需在阿里云服务器上装上和本机一样的(JDK、...
  • H2 是一款基于 Java 实现的小巧而强大的关系型数据库,支持嵌入式、客户端/服务器以及混合部署模式。H2 数据库适合嵌入小型应用程序、元数据管理、快速应用开发和测试、内存数据库
  • jdbc:sqlserver://X.x.x.x.:1433;DatabaseName=dbName; 创建一个连接到远程服务器上数据库的连接 ...请问各位大神,连接远程服务器数据库,还需要设置什么其他 信息吗? 我数据库使用的是Sql Server 2008R2
  • java中实现access数据库的远程访问

    千次阅读 2017-08-14 09:40:17
    在实际的项目中,可能会遇到这样的问题:A服务器上的应用程序需要访问B服务器上的access数据库(可以使用虚拟机模拟A、B服务器进行测试)。而access数据库是文件类型的,不同计算机间需要指定文件访问权限,增加了程序...
  • 开发企业应用时我们常常遇到要同时访问多种不同数据库的问题,有时是必须把数据归档到某种数据仓库中,有时是要把数据变更推送到第三方数据库中。使用Spring框架时,使用单一数据库是非常容易的,但如果要同时访问多...
  • JDBC java提供的一套访问数据库接口 java---&gt;操作数据库 JDBC发展历史:[了解] TYPE1:JDBC--odbc桥:间接访问数据库//odbc是c语言的jdbc ...java通过中间服务器-----访问数据库(mysql,oracle...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 402,545
精华内容 161,018
关键字:

java访问服务器数据库

java 订阅