java 代码笔记 2010-06-23 对ResultSet()的几个常用操作,实例。

Java JDBC 数据库操作实战

/*注意:

红字字体那儿是一些路问题,还有mysql的user和password。这个可能大家都不一样,所以需要相应的修改。


知识点:

一,JDBC 连接,操作数据库

二,ResultSet()几个常用的操作

三,mysql中 bolb类型,存入图片+获取图片

四,JDBC 批处理。

 

*/

 

 

package test20100623_resultset_blob;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.sql.Blob;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

public class jay_x_resultset_method {

    Properties p2 = new Properties();

    void connect_properties() {
        FileInputStream inputFile;
        try {
            inputFile = new FileInputStream(
                    "src/test20100623_resultset_blob/p2.properties");


            try {
                p2.load(inputFile);
            } catch (IOException e) {
                //
                e.printStackTrace();
            }
        } catch (FileNotFoundException e2) {
            //
            e2.printStackTrace();
        }
    }

    public String getValue(String key) {
        if (p2.containsKey(key)) {
            String value = p2.getProperty(key);// 得到某一属性的值
            return value;
        } else
            return "没有该属性";
    }

    public Connection getConnection2() {
        String url = "jdbc:mysql://localhost:3306/test_jdbc?useUnicode=true&characterEncoding=gbk";
        this.connect_properties();
        String user = this.getValue("user");
        String DbPassword = this.getValue("password");

        Connection conn = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection(url, user, DbPassword);
        } catch (SQLException e) {
            System.out.println("SQL 异常");
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            System.out.println("数据库没有找到");
            e.printStackTrace();
        }
        return conn;
    }

    public void getAllStudent_info() {
        Connection conn = this.getConnection2();
        Statement comm = null;
        ResultSet rs;
        try {
            comm = conn.createStatement();

            String sql2 = "select * from student";
            rs = comm.executeQuery(sql2);
            while (rs.next()) {
                String name = rs.getString("sname");
                System.out.print(name);
                System.out.println("  rs.getRow():" + rs.getRow());
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public void test_ResultSet() {
        Connection conn = this.getConnection2();
        Statement comm = null;
        ResultSet rs;
        try {
            comm = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
                    ResultSet.CONCUR_UPDATABLE);

            String sql2 = "select * from student";
            rs = comm.executeQuery(sql2);

            rs.next();
            if (rs.isFirst()) {
                System.out.println("当前是第一行");
            }
            rs.absolute(5);
            String name = rs.getString("sname");
            System.out.println("rs.absolute(5):" + name);
            System.out.println("rs.getRow():当前的行数" + rs.getRow());
 
            rs.last();
            System.out.println("ResultSet的总大小大小" + rs.getRow());
            if (rs.last()) {
                System.out.println("当前是最后一行");
            }
            System.out.println("ResultSet获取大小:"+rs.getFetchSize());
            System.out.println("rs.getRow():当前的行数" + rs.getRow() + " name:"
                    + rs.getString("sname") + "编号 "
                    + String.valueOf(rs.getInt("sid")));

            System.out.println("修改信息:");

            rs.first();
            // rs.moveToInsertRow();//把这句话 注释掉了后,就能实现了数据库数据的更新。
            rs.updateString("sname", "科比");
            rs.updateRow();
            rs.moveToCurrentRow();

            System.out.println("当前的行数" + rs.getRow() + " name:"
                    + rs.getString("sname") + "编号 "
                    + String.valueOf(rs.getInt("sid")));
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public void test_Batch() {
        Connection conn = this.getConnection2();
        Statement comm = null;
        try {
            comm = conn.createStatement();
            String sql2 = "insert into student values('11','易建联','9')";
            String sql = "delete from student where sid=11";
            comm.addBatch(sql);
            comm.addBatch(sql2);
            int[] results = comm.executeBatch();
            // 批处理。一次执行多个sql语句,提高效率。减少读取磁盘的次数。
            for (int i = 0; i < results.length; i++) {
                System.out.println(results[i]);// 影响的行数
            }
        } catch (SQLException e) {

            e.printStackTrace();
        }
    }

    // 往数据库存入图片。
    public void test_image() {
        Connection conn = this.getConnection2();
        String s = "src/test20100623_resultset_blob/湖人队标.png";
       
        //String s = "src/test20100623_resultset_blob/2560-1600-8.jpg";
        /*
         * Packet for query is too large (3859293 > 1048576). You can change
         * this value on the server by setting the max_allowed_packet' variable.
         */   
       
        // String sql = "insert into image_blob(image) values(?) ";
        String sql = "insert into image_blob values(?,?) ";
        File file = new File(s);
        FileInputStream fis = null;
        BufferedInputStream bis = null;

        try {
            fis = new FileInputStream(file);
            bis = new BufferedInputStream(fis);
        } catch (FileNotFoundException e1) {

            e1.printStackTrace();
        }
        PreparedStatement pstmt = null;
        try {
            pstmt = conn.prepareStatement(sql);
            try {
                pstmt.setInt(1, 4);
                //Duplicate entry '2' for key 1
                pstmt.setBinaryStream(2, bis, bis.available());
                pstmt.execute();
            } catch (IOException e) {

                e.printStackTrace();
            }

        } catch (SQLException e) {

            e.printStackTrace();
        }
    }

    // 把一个 InputStream的内容传递到FileOutputStream里面。
    public void read_blob() {
        Connection conn = this.getConnection2();
        Statement comm = null;
        String s = "src/test20100623_resultset_blob/湖人队标2.png";
        String sql = "SELECT * FROM image_blob;";
        Blob b;
        File file = new File(s);
        FileOutputStream fos = null;
       
        InputStream is = null;
        InputStreamReader isr=null;
        BufferedInputStream bis = null;   
        BufferedReader br=null;
        ResultSet rs;
        try {
            comm = conn.createStatement();
            rs = comm.executeQuery(sql);
            rs.next();
            b = rs.getBlob(2);
            /* java.sql.SQLException: Before start of result set */
            is = b.getBinaryStream();
            bis=new BufferedInputStream(is);
           
            isr=new InputStreamReader(is);
            br=new BufferedReader(isr);
            //br.readLine();
           
            // 从数据库 获取到了 图片 InputStream类型的。
            try {
                fos = new FileOutputStream(file);
                byte[] buf = new byte[2048];

                // 从 图片 InputStream里读出 字节。
                int num = 0;
                try {
                    num = is.read(buf);
                } catch (IOException e) {

                    e.printStackTrace();
                }
                while (num != (-1)) {// 是否读完所有数据
                    try {
                        fos.write(buf, 0, num);
                        // 写入
                    }
catch (IOException e) {

                        e.printStackTrace();
                    }// 将数据写往文件
                    try {
                        num = is.read(buf);
                    } catch (IOException e) {

                        e.printStackTrace();
                    }// 继续从网络中读取文件
                }
            } catch (FileNotFoundException e) {

                e.printStackTrace();
            }
        } catch (SQLException e) {

            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        jay_x_resultset_method a = new jay_x_resultset_method();
        a.getAllStudent_info();
        a.test_ResultSet();
        a.getAllStudent_info();
        a.test_Batch();
        a.test_image();
        a.read_blob();
    }

}

/*

drop database test_jdbc;
create database test_jdbc;
use test_jdbc;

create table student
(sid int not null,
sname varchar(50),
spassword varchar(20),
primary key(sid)
);

insert into student values('1','科比','24');
insert into student values('2','加内特','5');
insert into student values('3','艾弗森','23');

insert into student values('11','德罗巴','24');
insert into student values('12','罗尼','5');
insert into student values('13','克里斯蒂亚诺 诺那尔多','23');
insert into student values('21','梅西','24');
insert into student values('22','比利亚','5');
insert into student values('23','哈维','23');
insert into student values('31','麦孔','24');
insert into student values('32','埃弗拉','5');
insert into student values('33','费尔南德斯','23');
insert into student values('41','维迪奇','24');
insert into student values('42','卡西利亚斯','5');

insert into student values('43','詹姆斯','23');
insert into student values('51','韦德','24');
insert into student values('52','姚明','5');
insert into student values('53','邓肯','23');

*/

/*

以上是我最近学习Java记录的笔记和自己参照书本和老师所讲编写的 代码和注释。

有错误的地方,希望大家帮我指出。然后
1422942883 这是我的QQ,欢迎各位学习编程的同学加我好友,

或者给我的个人主页留言 (http://jayxigua.iteye.com/),一起讨论,学习。呵呵。

*/

 

本课题设计了一种利用Matlab平台开发的植物叶片健康状态识别方案,重点融合了色彩与纹理双重特征以实现对叶片病害的自动化判别。该系统构建了直观的图形操作界面,便于用户提交叶片影像并快速获得分析结论。Matlab作为具备高效数值计算与数据处理能力的工具,在图像分析与模式分类领域应用广泛,本项目正是借助其功能解决农业病害监测的实际问题。 在色彩特征分析方面,叶片影像的颜色分布常与其生理状态密切相关。通常,健康的叶片呈现绿色,而出现黄化、褐变等异常色彩往往指示病害或虫害的发生。Matlab提供了一系列图像处理函数,例如可通过色彩空间转换与直方图统计来量化颜色属性。通过计算各颜色通道的统计参数(如均值、标准差及主成分等),能够提取具有判别力的色彩特征,从而为不同病害类别的区分提供依据。 纹理特征则用于描述叶片表面的微观结构与形态变化,如病斑、皱缩或裂纹等。Matlab中的灰度共生矩阵计算函数可用于提取对比度、均匀性、相关性等纹理指标。此外,局部二值模式与Gabor滤波等方法也能从多尺度刻画纹理细节,进一步增强病害识别的鲁棒性。 系统的人机交互界面基于Matlab的图形用户界面开发环境实现。用户可通过该界面上传待检图像,系统将自动执行图像预处理、特征抽取与分类判断。采用的分类模型包括支持向量机、决策树等机器学习方法,通过对已标注样本的训练,模型能够依据新图像的特征向量预测其所属的病害类别。 此类课题设计有助于深化对Matlab编程、图像处理技术与模式识别原理的理解。通过完整实现从特征提取到分类决策的流程,学生能够将理论知识与实际应用相结合,提升解决复杂工程问题的能力。总体而言,该叶片病害检测系统涵盖了图像分析、特征融合、分类算法及界面开发等多个技术环节,为学习与掌握基于Matlab的智能检测技术提供了综合性实践案例。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值