安卓连接sql服务器 第二讲直接连接

本节来讲安卓如何直接连接sql server。在阅读本节之前,您应该先看一下第一讲的文章https://blog.csdn.net/wstcl/article/details/125081398?spm=1001.2014.3001.5502。开门见山,直接写代码步骤
  1.用android studio新建或打开一个安卓项目。
  2.引入第三方jar包sqljdbc4.jar、jtds-1.2.7.jar。
  3.新建一个包名SqlUtil,用于存放数据库连接类Base代码如下。

public class Base
{
    public final static String url="jdbc:jtds:sqlserver://10.0.2.2:1433/dbtest;charset=gbk" ;
    public final static String user="sa" ;
    public final static String password="123" ;

}

4.新建一个包名Bean,用于存放种子类,Bean中新建一个与数据库表对应的种子类——Product,代码如下:

public class Product
{
    public int Id;
    public String Name;
    public int Num;
}

5.新建一个包名Task,用于各种存放操作数据库各表的任务类,Task中建立一个与数据库表对应任务类——TaskProduct,代码如下

import android.app.Activity;
import android.os.Handler;
import android.util.Log;

import com.example.sqlsrver_dircet.Bean.Product;
import com.example.sqlsrver_dircet.SqlUtil.Base;


import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;


public class TaskProduct extends Thread
{

    private static String TAG="TaskProduct";

   public int Action;
   public static final int ListAll=0;
   public static final int Add=1;

   private ArrayList<Product> arrproduct=new ArrayList<>();
   private ArrayList<String> arrtip;


    private Connection con=null;
    public String Name;
    public int Num;

    private Handler handler;



    public TaskProduct( Handler handler)
    {

        this.handler=handler;

        arrtip=new ArrayList<>();

    }

    private void initconn()
    {
        String url= Base.url;
        String user=Base.user;
        String passwrod=Base.password;
        try
        {

            Class.forName("net.sourceforge.jtds.jdbc.Driver");//固定写法
            Log.v(TAG,"引擎加载成功!");

            //con = DriverManager.getConnection("jdbc:jtds:sqlserver://10.0.2.2:1433/dbtest;charset=gbk", "sa", "123");//ip:数据库的IP  db:数据库名字 user:数据库用户名   pwd:用户名对应密码

            con= DriverManager.getConnection(url,user,passwrod);
            //str="Connection初始化成功";

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

            Log.v("yzw",e.toString());
            arrtip.add(e.toString());

        }
    }

    public ArrayList<String> getArrTip()
    {
        return arrtip;
    }

    public ArrayList<Product> getArrProduct()
    {
        return arrproduct;
    }
   @Override
   public void run()
   {
       initconn();//初始化引擎要放到分线程中
       switch (Action)
       {
           case ListAll:
               excuteListAll(true);
               break;
           case Add:
               excuteAdd(true);
               break;

       }
   }


   //数据库存操作开始
    private void excuteListAll(boolean islaststep)
    {
        ResultSet rs=null;

        PreparedStatement sql=null;

        try
        {
            Statement sta;
            // sta = con.createStatement(); // 实例化Statement对象
            // 执行SQL语句,返回结果集


            sql=con.prepareStatement("{call dbo.p_my_ProductList}");

            rs=sql.executeQuery();
            while (rs.next())
            {
                Product item=new Product();
                item.Id=rs.getInt("Id");
                item.Name=rs.getString("Name");
                item.Num=rs.getInt("Num");

                arrproduct.add(item);
            }

            rs.close();
            sql.close();

        }

        catch (Exception e)
        {
            arrproduct=null;
            e.printStackTrace();
            arrtip.add(e.toString());
            Log.v(TAG,e.toString());
        }
        finally
        {
           if (islaststep) //最后一步行发送信息
           {
               handler.sendEmptyMessage(ListAll);
           }


        }



    }

    private void excuteAdd(boolean islaststep)
    {
        ResultSet rs=null;


        PreparedStatement sql=null;
        try
        {
            sql=con.prepareCall("{call dbo.p_my_ProductAdd(?,?)}"); //注意顺序
            sql.setString(1, Name);

            sql.setInt(2, Num);
            //Log.v(TAG,new Timestamp(BrithDay.getTime()));



            sql.execute();


            sql.close();

        }
        catch (Exception e)
        {

            e.printStackTrace();
            arrtip.add(e.toString());
        }
        finally
        {
            excuteListAll(false);
            if (islaststep) //最后一步行发送信息
            {
                handler.sendEmptyMessage(Add);
            }

        }
        arrtip.add("添加成功!");

    }
    //数据库存操作结束

}

6.然后在activity对应的布局文件写一个简单的界面,代码如下

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/TVList"/>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="品名"/>

        <EditText
            android:layout_width="100dp"
            android:layout_height="wrap_content"
            android:id="@+id/ETName"/>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="数量"/>
        <EditText
            android:layout_width="100dp"
            android:layout_height="wrap_content"
            android:id="@+id/ETNum"
            android:inputType="number"/>
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/BtnAdd"
            android:text="添加"/>
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/BtnList"
            android:text="列出"/>
    </LinearLayout>

</LinearLayout>

7.在Activity类中实现最终调用代码,如下

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.WorkSource;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import com.example.sqlsrver_dircet.Bean.Product;
import com.example.sqlsrver_dircet.Task.TaskProduct;

import java.util.ArrayList;

import swaddle.yinzhenwei.waitdialog.WaitDialog;

public class MainActivity extends AppCompatActivity implements View.OnClickListener
{
    private TextView tvlist;
    private EditText etname;
    private EditText etnum;



    private WaitDialog waitDialog;
    private TaskProduct taskProduct;

    private ArrayList<Product> arrproduct;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tvlist=findViewById(R.id.TVList);
        etname=findViewById(R.id.ETName);
        etnum=findViewById(R.id.ETNum);
        waitDialog=new WaitDialog(this);

        findViewById(R.id.BtnAdd).setOnClickListener(this);
        findViewById(R.id.BtnList).setOnClickListener(this);
        RunList();

    }


    //运行分线程开始
    private void RunAdd()
    {

        waitDialog.show();
        taskProduct=new TaskProduct(handler);
        taskProduct.Action=TaskProduct.Add;
        taskProduct.Name=etname.getText().toString();
        taskProduct.Num=Integer.parseInt(etnum.getText().toString());
        taskProduct.start();
    }


    private void RunList()
    {
        waitDialog.show();
        taskProduct=new TaskProduct(handler);
        taskProduct.Action=TaskProduct.ListAll;
        taskProduct.start();
    }
    //运行分线程结束

    //handler处理开始
    private Handler handler = new Handler()
    {
        public void handleMessage(Message msg)
        {
            switch (msg.what)
            {
                case TaskProduct.ListAll:
                    HandleListAll();
                    break;
                case TaskProduct.Add: //添加后刷新一下列表;
                    HandleListAll();
                    break;


            }
            showtip();
//            tiplist.clear();
            waitDialog.dismiss();
        }
    };



    private void HandleListAll()
    {

        ArrayList<Product> arrProduct=new ArrayList<>();
        arrProduct=taskProduct.getArrProduct();
        String out="";
        if (arrProduct!=null)
        {
           for (int i=0;i<arrProduct.size();i++)
           {
               Product item=arrProduct.get(i);
               String name=item.Name;
               int num=item.Num;
               out+=String.format("品名:%s  库存:%d\n",name,num);
           }
           tvlist.setText(out);

        }
    }

    //handler处理结束

    private void showtip()
    {
        ArrayList<String> ListTip=taskProduct.getArrTip();
        String tip="";
        if (ListTip!=null)
        {
            if (ListTip.size()>0)
            {
                for (int i=0;i<ListTip.size()-1;i++)
                {
                    tip+=ListTip.get(i)+"\n";
                }
                tip+=ListTip.get(ListTip.size()-1); //最后一行不换行
                //Toast.makeText(this,tip,Toast.LENGTH_SHORT).show();
            }
            if (tip.length()>0)
            {
                Toast.makeText(this,tip,Toast.LENGTH_SHORT).show();
                //list.setText(tip);
            }

            ListTip.clear();
            tip="";

        }
    }

    @Override
    public void onClick(View view)
    {
        switch (view.getId())
        {
            case R.id.BtnAdd:
                RunAdd();
                break;
            case R.id.BtnList:
                RunList();
                break;
        }
    }
} 

好了,运行程序,如图,这里只实现了列出所有数据和添加数据,其它诸如修改、删除,根据索引读取数据请读者试着模仿教程自己写吧。
  在这里插入图片描述

  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值