Reac native SQLite_Practice

 App.js

import React from 'react';
import {View, Text, StyleSheet, Pressable} from 'react-native';
import {createStackNavigator} from '@react-navigation/stack';
import {NavigationContainer} from '@react-navigation/native';
import ScreenA from './Components/ScreenA';
import Login from './Components/Login';

const Stack = createStackNavigator();

// const ScreenA = ({navigation}) => {
//   return (
//     <View style={Styles.container}>
//       <Text style={Styles.txt}>ScreenA</Text>
//       <Pressable style={({pressed})=>({backgroundColor:pressed ?'#ffffffff':'#ff5',
//       borderWidth:5,borderRadius:30})}
//       onPress={()=>navigation.navigate('ScreenB')}>
//         <Text style={Styles.txt}>Go To ScreenB</Text>
//       </Pressable>
//     </View>
//   );
// };
// const ScreenB = () => {
//   return (
//     <View style={Styles.container}>
//       <Text style={Styles.txt}>ScreenB</Text>
//     </View>
//   );
// };

const App = () => {
  return (
    <NavigationContainer>
      <Stack.Navigator screenOptions={{header: () => null}}>
        <Stack.Screen name="Login" component={Login} />
        <Stack.Screen name="ScreenA" component={ScreenA} />
      </Stack.Navigator>
    </NavigationContainer>
  );
};

const Styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: 'center',
    alignItems: 'center',
  },
  txt: {
    fontSize: 50,
    marginBottom: 20,
  },
});
export default App;
******************************************************************
login
index.js
import React, { useState, useEffect } from 'react';
import { View, Text, Image, Pressable, Alert } from 'react-native';
// import AsyncStorage from '@react-native-async-storage/async-storage';
import SQLite from 'react-native-sqlite-storage';
import { TextInput } from 'react-native-gesture-handler';
import styles from './styles';
const db = SQLite.openDatabase(
  {
    name: 'MainDB',
    location: 'default',
  },
  () => {},
  error => {
    console.log(error);
  },
);
const Login = ({ navigation }) => {
  const [Name, setName] = useState('');
  const [age, setage] = useState('');
  useEffect(() => {
    CreateTable();
    GetData();
  }, []);
  const CreateTable = () => {
    db.transaction(tx => {
      tx.executeSql(
        'CREATE TABLE IF NOT EXISTS' +
        'Users' +
        '(ID INTEGER PRIMARY KEY AUTOINCREMENT, Name TEXT, Age INTEGER );',
      );
    });
  };

  GetData = () => {
    try {
      db.transaction(tx => {
        tx.executeSql('SELECT Name,age FROM Users', [], (tx, results) => {
          var len = results.rows.length;
          if (len > 0) {
            navigation.navigate('ScreenA');
          }
        });
      });
    } catch (error) {
      // Error retrieving data
      console.log(error);
    }
  };
  const checkData = async () => {
    if (Name.length == 0 || age.length == 0) {
      Alert.alert('warning', 'please enter value');
    } else {
      try {
        // user = {
        //   age: age,
        //   Name: Name,
        // };
        // await AsyncStorage.setItem('userData', JSON.stringify(user));
        await db.transaction(async tx => {
          await tx.executeSql(
            "INSERT INTO Users (Name,age) VALUES ('" + Name + "'," + age + ')',
          );
          // await tx.executeSql('INSERT INTO Users (Name,age) VALUES (?,?)'), [
          //   Name,
          //   age,
          // ];
        });
        navigation.navigate('ScreenA');
      } catch (error) {
        // Error saving data
        console.log(error);
      }
    }
  };
  return (
    <View style={styles.container}>
      <View style={styles.imgView}>
        <Image style={styles.img} source={require('../../assets/logo.png')} />
      </View>
      <View style={styles.inputView}>
        <TextInput
          style={styles.input}
          placeholder="Enter txt"
          onChangeText={value => setName(value)}
        />
      </View>
      <View style={styles.inputView}>
        <TextInput
          style={styles.input}
          placeholder="Enter age"
          onChangeText={value => setage(value)}
        />
      </View>

      <Pressable style={styles.pressable} onPress={() => checkData()}>
        <Text style={styles.presTxt}>Login</Text>
      </Pressable>
    </View>
  );
};

export default Login;
login
styles.js
import {StyleSheet} from 'react-native';

const styles = StyleSheet.create({
  container: {

    flex: 1,
    backgroundColor: '#4167ab',
  },
  txt: {
    fontSize: 20,
  },
  img:{
     
      height:200,
      width:280,
     
  },
  imgView:{
      alignSelf:'center'
  },
  inputView:{
      alignSelf:'center'
  },
  input:{
      backgroundColor:'skyblue',
      width:290,
      height:60,
      fontSize:30,
      textAlign:'center',
      borderRadius:20
  },
  pressable:{
      marginTop:20,
      backgroundColor:'green',
      alignSelf:'center',
      height:50,
      width:100,
      borderRadius:10
  },
  presTxt:{
      textAlign:'center',
      fontSize:30
  }
});

export default styles;
****************************************************************
screenA
index.js
import React, {useState, useEffect} from 'react';
import {View, Text, Pressable, Alert} from 'react-native';
// import AsyncStorage from '@react-native-async-storage/async-storage';
import SQLite from 'react-native-sqlite-storage';
import Styles from './style';
import {TextInput} from 'react-native-gesture-handler';
const db = SQLite.openDatabase(
  {
    name: 'MainDB',
    location: 'default',
  },
  () => {
    console.log('screenA database created');
  },
  error => {
    console.log(error);
  },
);

const ScreenA = ({navigation}) => {
  const [name, setName] = useState('');
  const [age, setage] = useState('');
  useEffect(() => {
    GetData();
  }, []);
  const UpdateData = async () => {
    if (name.length == 0) {
      Alert.alert('warning', 'please enter value');
    } else {
      try {
        user = {
          Name: name,
        };
        await AsyncStorage.mergeItem('userData', JSON.stringify(user));
        Alert.alert('massege', 'your data succesfully updated');
      } catch (error) {
        // Error saving data
        console.log(error);
      }
    }
  };
  const RemoveData = async () => {
    try {
      // await AsyncStorage.removeItem('key');
      await AsyncStorage.clear(); //it does not need key it is delete all keys
      navigation.navigate('Login');
    } catch (error) {
      // Error saving data
      console.log(error);
    }
  };

  GetData = () => {
    try {
      // await AsyncStorage.getItem('userData').then(value => {
      //   if (value != null) {
      //     let user = JSON.parse(value);
      //     setName(user.Name);
      //     setage(user.age);
      //   }
      // });
      //*************************SQLite */
      db.transaction(tx => {
        tx.executeSql('SELECT Name,age FROM Users', [], (results) => {
          var len = results.rows.length;
          console.log(results);
          if (len > 0) {
            var userName = results.rows.item(0).Name;
            var userAge = results.rows.item(0).age;

            setName(userName);
            setage(userAge);
          }
        });
      });
    } catch (error) {
      // Error retrieving data
      console.log(error);
    }
  };

  return (
    <View style={Styles.container}>
      <Text style={Styles.txt}>Name:{name}</Text>
      <Text style={Styles.txt}>Age:{age}</Text>
      <View style={Styles.inputView}>
        <TextInput
          style={Styles.input}
          placeholder="enter text"
          value={name}
          onChangeText={val => setName(val)}
        />
      </View>
      <Pressable
        style={({pressed}) => ({
          backgroundColor: pressed ? '#ffffffff' : '#ff5',
          borderWidth: 5,
          borderRadius: 30,
        })}
        onPress={() => UpdateData()}>
        <Text style={Styles.txt}>Update</Text>
      </Pressable>
      <Pressable
        style={({pressed}) => ({
          backgroundColor: pressed ? 'brown' : 'green',
          borderWidth: 5,
          borderRadius: 30,
        })}
        onPress={() => RemoveData()}>
        <Text style={Styles.txt}>remove</Text>
      </Pressable>
    </View>
  );
};

export default ScreenA;

screenA
styles.js
import { StyleSheet } from "react-native";

const Styles = StyleSheet.create({
    container: {
      flex: 1,
      justifyContent: 'center',
      alignItems: 'center',
    },
    txt: {
      fontSize: 50,
      marginBottom: 20,
    },
    inputView:{
      alignSelf:'center',

    },
    input:{
      borderWidth:3,
      width:250,
      borderRadius:20,
      textAlign:'center',
      fontSize:30
    }
  });
  export default Styles;
**********************************************************************
package.json
  "dependencies": {
    "@react-native-async-storage/async-storage": "^1.15.8",
    "@react-native-masked-view/masked-view": "^0.2.6",
    "@react-navigation/native": "^6.0.2",
    "@react-navigation/stack": "^6.0.7",
    "react": "17.0.2",
    "react-native": "0.65.1",
    "react-native-gesture-handler": "^1.10.3",
    "react-native-safe-area-context": "^3.3.2",
    "react-native-screens": "^3.7.2",
    "react-native-sqlite-storage": "^5.0.0"
  },

Comments

Popular posts from this blog

Privacy Policy for Live Weather Forecast - Realtime app

NFC Checker App Privacy Policy

FlatList