android Studio与数据库SQLserver连接实现登录

这里写图片描述

主要用到:1.DBUtil 类
2. LoginActivity(自动建立的登录页面)
3. xml布局文件(根据LoginActivity自动生成,不需要管)
4. libs中的.jar包
5. AndroidManifest.xml中加权限
4,5步不懂得可以参考:https://blog.csdn.net/na2609613672/article/details/82222795

DBUtil 类代码:

package com.monitorsys.seashell.myapp;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class DBUtil
{
    private  String name=null;
    private  String pass=null;

    public DBUtil(String m,String p){
        this.name=m;
        this.pass=p;
    }
    private static Connection getSQLConnection(String ip, String user, String pwd, String db)
    {
        Connection con = null;
        try
        {
            Class.forName("net.sourceforge.jtds.jdbc.Driver");
            con = DriverManager.getConnection("jdbc:jtds:sqlserver://" + ip + ":1433/" + db + ";charset=utf8", user, pwd);
        } catch (ClassNotFoundException e)
        {
            e.printStackTrace();
        } catch (SQLException e)
        {
            e.printStackTrace();
        }
        return con;
    }

    public String QuerySQL()
    {
        String result = "";
        try
        {
            Connection conn= getSQLConnection("数据库地址", "用户名", "密码", "数据库名");//根据自己的数据库信息填写对应的值
            String sql = "select username from userinfo  where userpwd=? and  username=? ";
            PreparedStatement stat = conn.prepareStatement(sql);
            stat.setString(1, pass);
            stat.setString(2, name);
            ResultSet rs = stat.executeQuery();
            while (rs.next())
            {
                result= "1" ;
        }
            rs.close();
            conn.close();
        } catch (SQLException e)
        {
            e.printStackTrace();
            result += "查询数据异常!" + e.getMessage();
        }
        return result;
    }
    public static void main(String[] args)
    {
    }
}

LoginActivity代码:
1.主要看登陆,其他都是自动生成的

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        mEmailView = (AutoCompleteTextView) findViewById(R.id.email);//1.用户
        populateAutoComplete();//动态获取PERMISSION_GRANTED(通讯录权限)

        mPasswordView = (EditText) findViewById(R.id.password);//2.密码
        //setOnEditorActionListener:编辑完之后点击软键盘上的回车键才会触发
        mPasswordView.setOnEditorActionListener(new TextView.OnEditorActionListener() {
            @Override
            public boolean onEditorAction(TextView textView, int id, KeyEvent keyEvent) {//当用户处在输入密码编辑框,软键盘打开,输入确定按钮(EditorInfo.IME_NUL)时尝试登录
                // 按下完成按钮,这里IME_ACTION_DONE和.xml中imeOptions对应
                if (id == EditorInfo.IME_ACTION_DONE || id == EditorInfo.IME_NULL) {
                    attemptLogin();
                    return true;//返回true,保留软键盘。false,隐藏软键盘
                }
                return false;
            }
        });
//3.登陆(看这里>>>>>>>>>>
   Button mEmailSignInButton = (Button) findViewById(R.id.email_sign_in_button);//找到按钮
      mEmailSignInButton.setOnClickListener(this.LoginInButtonlistener);//绑定监听器
        WorkThread wt=new WorkThread();
        wt.start();//调动子线程
//看到这就可以了>>>>>>>>>

   mLoginFormView = findViewById(R.id.login_form);//滑动视图
    mProgressView = findViewById(R.id.login_progress);//进度条
    }

2.点击登陆按钮后,触动监听器:

  private View mProgressView;
    private View mLoginFormView;
    //按钮监听器
    View.OnClickListener LoginInButtonlistener = new View.OnClickListener()
    {
        public void onClick(View view) {
           String s= mPasswordView.getText().toString();//获取页面密码
            String sy=mEmailView.getText().toString();//获取页面用户名
            Message m=handler.obtainMessage();//获取事件
            Bundle b=new Bundle();
            b.putString("pass",s);//以键值对形式放进 Bundle中
            b.putString("name",sy);
            m.setData(b);          
            handler.sendMessage(m);//把信息放到通道中            
        }
    };

3.信息放到通道中 ,有信息后,looper工作,调用Handler中的handleMessage

  class WorkThread extends  Thread{
        @Override
        public  void run(){
            Looper.prepare();
            handler=new Handler(){
                @Override
                public  void handleMessage(Message m){
                    super.handleMessage(m);
                    Bundle b= m.getData();//得到与信息对用的Bundle
                    String name=b.getString("name");//根据键取值
                    String pass=b.getString("pass");
                    DBUtil db=new DBUtil(name,pass);//调用数据库查询类
                    String ret=db.QuerySQL();//得到返回值
        if (ret.equals("1"))//为1,页面跳转,登陆成功
            {
                Intent localIntent = new Intent();
                localIntent.setClass(LoginActivity.this, SelectActivity.class);
                LoginActivity.this.startActivity(localIntent);
                Toast.makeText(LoginActivity.this, "登录成功",Toast.LENGTH_SHORT).show();//显示提示框
                return;
            }
            Toast.makeText(LoginActivity.this, "用户名或密码错误", Toast.LENGTH_SHORT).show();

                }
            };
            Looper.loop();//Looper循环,通道中有数据执行,无数据堵塞
        }
    }

登录页面:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/na2609613672/article/details/82254051