Android连接MySQL数据库(Android Studio环境下运行)

1.环境配置:

(1)Android Studio软件(附带可以运行正常测试)

(2)Mysql软件  

(3)Mysql对应的jar包.

2.详细步骤

(1)MySQL数据:如下图

MySQL库下面默认有个user用户表,创建一个新的用户(为了权限的使用))

MySQL中创建一个用户并为其设置权限.

代码使用本机的IP地址连接数据库,不能使用localhost进行

(1)创建工程(简单操作)

(2)为工程导入mysql.jar包,自行操作

项目结构就这样

代码实现:

(1)AndroidManifest.xml文件

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.chen.myapplication">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
</manifest>

注意增加了新的配置

数据库的时候用着两个

(2)布局文件,差个图片,自己导入就行哦

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.chen.myapplication.MainActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"

        android:orientation="vertical"
        tools:layout_editor_absoluteX="16dp"
        tools:layout_editor_absoluteY="16dp">


        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="60dp"
                android:orientation="horizontal">

                <TextView
                    android:id="@+id/textView2"
                    android:gravity="center"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:layout_marginTop="10dp"
                    android:layout_marginBottom="20dp"
                    android:text="花茶助手"
                    android:textSize="20dp"/>
            </LinearLayout>

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="185dp"
                android:orientation="vertical">

                <ImageView
                    android:id="@+id/imageView"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:scaleType="fitCenter"
                    app:srcCompat="@mipmap/icon" />
            </LinearLayout>

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="60dp"
                android:gravity="center"
                android:orientation="vertical">

                <Button
                    android:id="@+id/button"
                    android:layout_marginTop="10dp"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:gravity="center"
                    android:text="取像" />
            </LinearLayout>

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="43dp"
                android:orientation="horizontal"
                android:gravity="center_vertical">

                <RadioGroup
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_weight="1"
                    android:layout_marginLeft="50dp"
                    android:layout_marginRight="10dp"
                    android:gravity="center"
                    android:orientation="horizontal">

                    <RadioButton
                        android:id="@+id/radioButton1"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_weight="1"

                        android:text="价格" />

                    <RadioButton
                        android:id="@+id/radioButton2"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_weight="1"
                        android:text="营养" />

                    <RadioButton
                        android:id="@+id/radioButton3"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_weight="1"
                        android:text="品种" />
                </RadioGroup>

            </LinearLayout>

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_margin="15dp"
                android:orientation="vertical">

                <TextView
                    android:id="@+id/textView"
                    android:layout_width="match_parent"
                    android:background="@drawable/textview_border"
                    android:layout_height="match_parent"
                    android:text="识别内容" />
            </LinearLayout>

        </LinearLayout>
    </LinearLayout>

</android.support.constraint.ConstraintLayout>

(3)主函数

package com.example.chen.myapplication;

import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.RadioButton;
import android.widget.TextView;

import org.w3c.dom.Text;

import java.io.File;
import java.io.FileOutputStream;
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.Calendar;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private ImageView imageView;
    private TextView textView;
    private Button button;
    private RadioButton radioButton1;
    private RadioButton radioButton2;
    private RadioButton radioButton3;
    //连接数据库
    private String url="jdbc:mysql://192.168.65.99:3306/test";
    private String user="rootes";
    private String password="123456";
    PreparedStatement statement=null;
    Statement stat=null;
    Connection conn=null;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        imageView=(ImageView)findViewById(R.id.imageView);
        textView=(TextView)findViewById(R.id.textView);
        button=(Button)findViewById(R.id.button);
        button.setOnClickListener(this);
        radioButton1=(RadioButton)findViewById(R.id.radioButton1);
        radioButton2=(RadioButton)findViewById(R.id.radioButton2);
        radioButton3=(RadioButton)findViewById(R.id.radioButton3);
        radioButton1.setOnClickListener(this);
        radioButton2.setOnClickListener(this);
        radioButton3.setOnClickListener(this);
        //为按钮设置一个标记
        button.setTag(0);
        radioButton1.setTag(1);
        radioButton2.setTag(2);
        radioButton3.setTag(3);

    }
    @Override
    public void onClick(View v) {
        Integer id=(Integer)v.getTag();
        if(id==0) {
            new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        Class.forName("com.mysql.jdbc.Driver");
                        java.sql.Connection cn= DriverManager.getConnection("jdbc:mysql://192.168.65.99/test","rootes","123456");
                        String sql="select name from test";
                    Statement st=(Statement)cn.createStatement();
                    ResultSet rs=st.executeQuery(sql);
                    while(rs.next()){
                        String mybook=rs.getString("name");
                        System.out.println(mybook);
                        Log.i("Mainactivity",mybook);
                    }
                    cn.close();
                    st.close();
                    rs.close();
                        System.out.println("连接数据库成功");
                    } catch (ClassNotFoundException e) {
                        System.out.println("连接数据库失败");
                        e.printStackTrace();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
            }).start();
            //把imageView转换成Bitmap
           // Bitmap bitmap=loadBitmapFromView(imageView);
            //获取图像对应的RGB值.,并存入数据库中
            //GetRGB(bitmap);
           // conn=getConnection();
            //把bitmap转换成为一个文件
            //InputPhoto(bitmap);
            //显示新的Bitmap图片
           // imageView.setImageBitmap(bitmap);
           /// System.out.println("取像");

        }else if(id==1){
            System.out.println("价格");

        }else if(id==2){
            System.out.println("营养");
        }else if(id==3){
            System.out.println("品种");
        }

    }
    ///获取图片的RGB值
    private void GetRGB(Bitmap bitmap) {
        int w=bitmap.getWidth();
        int h=bitmap.getHeight();
        StringBuffer sql=new StringBuffer();
        sql.append("insert into tb_rgb(x,y,r,g,b,rgb)values ");
        for(int i=1;i<h;i++){//i表示的位置是y
            for(int j=1;j<w;j++){
                int argb=bitmap.getPixel(j,i);
                int r =( argb>>16)&0xff;
                int g =( argb>>8)&0xff;
                int b =argb&0xff;
                int a =(argb>>24)&0xff;
                int rgb =(a<<24)|(r<<16)|(g<<8)|b;
                sql.append("("+j+","+i+","+r+","+j+","+b+","+rgb+"),");

              //  System.out.println("R="+r+",G="+g+",B="+b);
                bitmap.setPixel(j,i,Color.RED);
            }
        }
        //插入数据入库
       InsertSql(sql.toString());
        System.out.println("数据库插入成功");
    }

    //获取imageView中的图片
    private Bitmap loadBitmapFromView(ImageView imageView) {
        imageView.setDrawingCacheEnabled(true);
        imageView.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH);
        imageView.setDrawingCacheBackgroundColor(Color.WHITE);
        int w = imageView.getWidth();
        int h = imageView.getHeight();
        Bitmap bmp = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(bmp);
        canvas.drawColor(Color.WHITE);
        //如果不设置canvas的画布为白色,则生成透明
        imageView.layout(0, 0, w, h);
        imageView.draw(canvas);
        return bmp;
    }
    //连接数据库
    public Connection getConnection(){
        try{
            Class.forName("com.mysql.jdbc.Driver");
            conn= DriverManager.getConnection(url, user, password);
            System.out.println("数据库连接成功");
        } catch (Exception  e) {
            System.out.println("数据库连接失败");
            e.printStackTrace();
        }
        return conn;
    }
    public  void InsertSql(String sql){

        String sqls=sql.substring(0,sql.length()-1);
        conn=getConnection();//连接数据库
        System.out.println("连接数据库成功");
        try{
            stat=conn.createStatement();
            //stat.execute(sqls);
        }catch (Exception e){
            System.out.println("数据库插入失败");
            e.printStackTrace();
        }
    }
    //保存图片文件
    private void InputPhoto(Bitmap bitmap) {
        FileOutputStream fos;
        String imagePath="";
        try {
            boolean isHasSDCard = Environment.getExternalStorageState().equals(
                    android.os.Environment.MEDIA_MOUNTED);
            if (isHasSDCard) {
                File sdRoot = Environment.getExternalStorageDirectory();

                File file = new File(sdRoot, Calendar.getInstance().
                        getTimeInMillis() + ".png");
                System.out.println("文件路径"+file.toString());
                fos = new FileOutputStream(file);
                imagePath = file.getAbsolutePath();
            }else {
                throw new Exception("创建文件夹失败了");
            }
            bitmap.compress(Bitmap.CompressFormat.PNG,90,fos);
            fos.flush();
            fos.close();
          }catch (Exception e) {
            System.out.println("文件保存失败");
            e.printStackTrace();
        }
        imageView.destroyDrawingCache();
        System.out.println("保存文件成功");
    }

}

注意MySQL的连接操作必须放在子线程中才可以执行,不然运行不了,为什么原因暂时不知道,望高人指点一二

选择连接的用户必须选择刚才创建的有权限很高的用户,不然不可以哦.

运行结果

 

源码下载:https://download.csdn.net/download/hongfei568718926/11859551

©️2020 CSDN 皮肤主题: 书香水墨 设计师:CSDN官方博客 返回首页